关于 sql-ops
sql-ops 是面向 SQL 使用者的模式速查技能,涵盖查询结构、索引和事务等常见主题。还列出常见反模式及改进方式。
主要功能
- 01CTE 与链式查询示例
- 02窗口函数速查
- 03JOIN 类型参考
- 04分页与事务隔离说明
- 05索引类型及反模式建议
适用场景
- 01编写多步骤查询
- 02分析排名与累计值
- 03选择分页或索引方式
- 04排查常见 SQL 写法问题
安装
复制下面的命令,在终端中运行。
$
npx skills add https:/ / github.com/ 0xdarkmatter/ claude-mods --skill sql-ops安装后在 Claude Code 中输入/sql-ops确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
assets/.gitkeepreferences/indexing-strategies.mdwindow-functions.mdscripts/.gitkeep详细介绍
SQL 模式
常见 SQL 模式快速参考。
CTE(公用表表达式)
WITH active_users AS (
SELECT id, name, email
FROM users
WHERE status = 'active'
)
SELECT * FROM active_users WHERE created_at > '2024-01-01';
链式 CTE
WITH
active_users AS (
SELECT id, name FROM users WHERE status = 'active'
),
user_orders AS (
SELECT user_id, COUNT(*) as order_count
FROM orders GROUP BY user_id
)
SELECT u.name, COALESCE(o.order_count, 0) as orders
FROM active_users u
LEFT JOIN user_orders o ON u.id = o.user_id;
窗口函数(快速参考)
| 函数 | 用途 |
|---|---|
ROW_NUMBER() | 唯一的连续编号 |
RANK() | 带间隔的排名(1、2、2、4) |
DENSE_RANK() | 不带间隔的排名(1、2、2、3) |
LAG(col, n) | 前一行的值 |
LEAD(col, n) | 后一行的值 |
SUM() OVER | 累计总和 |
AVG() OVER | 移动平均值 |
SELECT
date,
revenue,
LAG(revenue, 1) OVER (ORDER BY date) as prev_day,
SUM(revenue) OVER (ORDER BY date) as running_total
FROM daily_sales;
JOIN 参考
| 类型 | 返回结果 |
|---|---|
INNER JOIN | 仅匹配的行 |
LEFT JOIN | 左表所有行及右表匹配的行 |
RIGHT JOIN | 右表所有行及左表匹配的行 |
FULL JOIN | 所有行,无匹配项处为 NULL |
分页
-- OFFSET/LIMIT (simple, slow for large offsets)
SELECT * FROM products ORDER BY id LIMIT 20 OFFSET 40;
-- Keyset (fast, scalable)
SELECT * FROM products WHERE id > 42 ORDER BY id LIMIT 20;
事务隔离级别
| 级别 | 脏读 | 不可重复读 | 幻读 | 用途 |
|---|---|---|---|---|
READ UNCOMMITTED | 可能 | 可能 | 可能 | 较少使用(PostgreSQL 将其视为 READ COMMITTED) |
READ COMMITTED | 否 | 可能 | 可能 | 大多数数据库的默认级别 |
REPEATABLE READ | 否 | 否 | 可能* | 多语句读取保持一致 |
SERIALIZABLE | 否 | 否 | 否 | 关键不变量(序列化失败时重试) |
*PostgreSQL 的 REPEATABLE READ 还会通过快照隔离防止幻读。
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;
-- ... critical operations ...
COMMIT; -- be prepared to retry on serialization failure
全局保持默认的 READ COMMITTED;仅在逻辑需要时提高单个事务的隔离级别。
索引快速参考
| 索引类型 | 最适用场景 |
|---|---|
| B-tree | 范围查询、ORDER BY |
| Hash | 仅精确相等查询 |
| GIN | 数组、JSONB、全文检索 |
| 覆盖索引 | 避免查找表 |
反模式
| 错误 | 修正方法 |
|---|---|
SELECT * | 明确列出列名 |
WHERE YEAR(date) = 2024 | WHERE date >= '2024-01-01' |
NOT IN 中包含 NULL | 使用 NOT EXISTS |
| N+1 查询 | 使用 JOIN 或批量处理 |
其他资源
如需了解详细模式,请加载:
./references/window-functions.md- 完整的窗口函数模式./references/indexing-strategies.md- 索引类型、覆盖索引和优化
评论
支持 Markdown