mcpField
W
writing-sql

writing-sql

github.com/borkweb开发853 次安装2 天前更新
代码仓库

关于 writing-sql

writing-sql 是一项用于编写和审查 SQL 的技能,规定统一的纵向排版与大写关键字。它适用于需要规范短查询和复杂查询格式的项目,也涵盖嵌入 PHP 的 SQL。

主要功能

  1. 01SQL 关键字使用大写
  2. 02每个子句独占一行
  3. 03子句内容缩进排列
  4. 04每行书写一个列名
  5. 05JOIN 与条件的排版规则
  6. 06按 SQL 场景提供参考

适用场景

  1. 01统一短查询与复杂查询格式
  2. 02检查 SQL 是否符合排版规则
  3. 03编写 PHP 字符串中的 SQL
  4. 04查阅 DDL 或 DML 规则

安装

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

$npx skills add https://github.com/borkweb/skills --skill writing-sql

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

包含的文件

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

references/
complex.md
ddl.md
dml.md
php.md

详细介绍

编写 SQL

概述

本项目中的所有 SQL 都遵循严格的纵向排版风格:每个顶层关键字单独占一行,其下的内容均缩进。

短查询也不例外。 单列、单表、单条件的查询,排版方式与包含 10 个 JOIN 的复杂查询相同。

规则

关键字大小写

所有 SQL 关键字均使用大写:SELECT、FROM、WHERE、JOIN、LEFT JOIN、RIGHT JOIN、CROSS JOIN、ON、AND、OR、NOT、IN、EXISTS、BETWEEN、LIKE、IS NULL、IS NOT NULL、INSERT INTO、VALUES、UPDATE、SET、DELETE FROM、ORDER BY、GROUP BY、HAVING、LIMIT、OFFSET、AS、CASE、WHEN、THEN、ELSE、END、UNION、UNION ALL、EXCEPT、INTERSECT、WITH、RECURSIVE、OVER、PARTITION BY、ROWS、RANGE、ON DUPLICATE KEY UPDATE、CREATE TABLE、ALTER TABLE、DROP TABLE、ADD COLUMN、DROP COLUMN、MODIFY COLUMN、DEFAULT、NOT NULL、PRIMARY KEY、FOREIGN KEY、REFERENCES、AUTO_INCREMENT、ENGINE、CHARSET、COLLATE、INDEX、UNIQUE KEY、IF EXISTS、IF NOT EXISTS、CASCADE。

纵向布局

每个顶层子句关键字都必须单独占一行,左侧不缩进。属于该子句的所有内容都应在其下方缩进一级(4 个空格)。

顶层子句关键字:SELECT、FROM、WHERE、ORDER BY、GROUP BY、HAVING、LIMIT、SET、VALUES、ON DUPLICATE KEY UPDATE。

列

每行一个列,缩进并在末尾加逗号:

SELECT
    a.name,
    a.weight_kg,
    a.birth_date
FROM 和 JOIN

JOIN 应缩进在 FROM 下方。ON 应缩进在 JOIN 下方。内连接使用裸 JOIN(INNER 关键字多余)。需要外连接时,明确使用 LEFT JOIN 或 RIGHT JOIN:

FROM
    animals a
    JOIN species s
        ON a.species_id = s.id
    LEFT JOIN habitats h
        ON a.habitat_id = h.id

多条件 JOIN——每个条件单独占一行,并以 AND 开头:

FROM
    animals a
    JOIN observations o
        ON a.id = o.animal_id
        AND o.observed_at >= :start_date
        AND o.status = 'confirmed'
WHERE

第一个条件缩进。后续行保持相同缩进,并以 AND/OR 开头:

WHERE
    s.class = :class
    AND h.region = :region
    AND a.released_at IS NULL
ORDER BY / GROUP BY
ORDER BY
    a.name ASC
GROUP BY
    s.id,
    h.name
LIMIT / OFFSET
LIMIT
    :limit
OFFSET
    :offset

条件示例

只阅读与正在编写或审查的 SQL 相关的参考文档:

  • 复杂查询:子查询、CTE、CASE、窗口函数和集合运算。
  • DML:INSERT、UPDATE 和 DELETE。
  • DDL:迁移中的 CREATE、ALTER 和 DROP。
  • PHP 中的 SQL:PDO、heredoc、wpdb、Laravel 和动态片段。

宿主语言字符串中的 SQL 也遵循相同的纵向布局,包括短查询。保留参数绑定和查询语义;格式调整不代表可以执行查询或更改架构。

评论

支持 Markdown