mcpField
S
sql-ops

sql-ops

github.com/0xdarkmatter数据与数据库7838 次安装2 周前更新
代码仓库

关于 sql-ops

sql-ops 是面向 SQL 使用者的模式速查技能,涵盖查询结构、索引和事务等常见主题。还列出常见反模式及改进方式。

主要功能

  1. 01CTE 与链式查询示例
  2. 02窗口函数速查
  3. 03JOIN 类型参考
  4. 04分页与事务隔离说明
  5. 05索引类型及反模式建议

适用场景

  1. 01编写多步骤查询
  2. 02分析排名与累计值
  3. 03选择分页或索引方式
  4. 04排查常见 SQL 写法问题

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/0xdarkmatter/claude-mods --skill sql-ops

安装后在 Claude Code 中输入/sql-ops确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

assets/
.gitkeep
references/
indexing-strategies.md
window-functions.md
scripts/
.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) = 2024WHERE date >= '2024-01-01'
NOT IN 中包含 NULL使用 NOT EXISTS
N+1 查询使用 JOIN 或批量处理

其他资源

如需了解详细模式,请加载:

  • ./references/window-functions.md - 完整的窗口函数模式
  • ./references/indexing-strategies.md - 索引类型、覆盖索引和优化

评论

支持 Markdown