DB-04 · SOFTWARE REFERENCE / 软件速查
以 PostgreSQL 为参考方言,从 SELECT 进入过滤、连接、聚合、窗口函数、事务和数据建模;MySQL、SQLite 与 Access 的具体语法会有差异。
查询完整示例
SELECT id, title FROM tasks WHERE status = 'todo' ORDER BY created_at DESC;
明确列名,避免长期使用 SELECT *。
空值代码片段
WHERE due_date IS NULL
NULL 不用等号比较;这是用于 SELECT / UPDATE / DELETE 的条件片段。
分页代码片段
ORDER BY id LIMIT 50 OFFSET 0
分页必须配稳定排序;这是追加在 SELECT 后的排序分页片段。
左连接完整示例
SELECT p.title, COUNT(t.id) FROM projects p LEFT JOIN tasks t ON t.project_id=p.id GROUP BY p.id;
保留没有任务的项目。
分组过滤代码片段
HAVING COUNT(*) >= 3
WHERE 过滤分组前的行,HAVING 过滤分组结果;这是 GROUP BY 查询片段。
窗口函数代码片段
ROW_NUMBER() OVER (PARTITION BY project_id ORDER BY created_at)
保留明细行的同时计算组内排名;这是 SELECT 列表达式。
03写入、事务与安全
把修改包进可回滚的边界,并始终参数化输入。
事务代码片段
BEGIN;
UPDATE tasks SET status='done' WHERE id=$1;
COMMIT;
PostgreSQL 应用代码模板;$1 需要由数据库驱动绑定,不能原样粘贴进普通 SQL 编辑器。
冲突处理代码片段
INSERT INTO tasks (id, title, status)
VALUES ($1, $2, 'todo')
ON CONFLICT (id) DO UPDATE
SET title = EXCLUDED.title;
PostgreSQL 应用代码模板;先明确唯一约束和覆盖语义,$1/$2 由驱动绑定。
检查影响行代码片段
UPDATE tasks
SET status = 'done', updated_at = CURRENT_TIMESTAMP
WHERE id = $1
RETURNING id, updated_at;
PostgreSQL 应用代码模板;$1 由驱动绑定,RETURNING 让调用端确认修改结果。
主外键完整示例
CREATE TABLE tasks (
id uuid PRIMARY KEY,
project_id uuid NOT NULL REFERENCES projects(id),
progress numeric(5,2) CHECK (progress BETWEEN 0 AND 100)
);
PostgreSQL 示例;让数据库维护实体、引用与边界完整性。
检查约束完整示例
ALTER TABLE tasks ADD CONSTRAINT tasks_progress_range CHECK (progress BETWEEN 0 AND 100);
边界规则放到数据库最后一道防线。
索引完整示例
CREATE INDEX ON tasks (status, due_date);
围绕真实查询模式建索引,并用执行计划验证。
没有匹配内容换一个短词,或清空筛选查看全部主题。
这里只归档,不运行代码。支持导入与下载纯文本源码;`.mlx`、`.xlsx`、`.accdb` 等二进制容器不会入库。密码、Token、私钥等秘密也会被拒绝,请改用环境变量。
PRIVATE SESSION REQUIRED登录后打开你的私人仓库
游客只看到这个说明,不会收到、缓存或渲染任何私人源码。
安全登录SUPPORT NETWORK / 支持体系
资料从哪里查,问题怎样继续推进
优先核对官方文档和版本,再带着最小复现进入社区;安装包只走产品官方入口。
FIRST RESPONSE / 首轮排查
不要盲试:保存症状、环境和最小样本
01查询返回重复或少行
- 先核对每张表的粒度和主键
- 逐个加入 JOIN 并比较行数
- 检查 INNER/LEFT 与 NULL 语义
下一步:用小样本画出关系基数,再决定去重还是修正连接条件。
02查询速度突然变慢
- 运行 EXPLAIN (ANALYZE, BUFFERS)
- 核对过滤选择性与统计信息
- 检查隐式类型转换和缺失索引
下一步:以执行计划为证据优化,不凭感觉添加大量索引。
03写入失败或锁等待
- 保存完整错误码和事务状态
- 确认约束、权限与参数类型
- 查看阻塞会话和锁顺序
下一步:先回滚失败事务,再以一致顺序缩短事务范围。