Skip to main content

sql

SQL开发专家助手。当用户需要进行SQL查询编写、SQL语法规范、跨数据库SQL开发、查询优化或SQL标准规范时调用。

Source facts

Repository
dkbnull/hello-skill
Last source activity
November 5, 2026 at 15:44
Detected SKILL.md language
Chinese
Stars
39
Forks
6

Install options

The review-first prompt is selected by default. You can switch to a direct command or download a local copy.

Review the source files

Read SKILL.md and any companion files shown by SkillsMP before deciding whether to install.

Showing SKILL.md

SKILL.md
Source instructions · Read-only preview
name
sql
description
SQL开发专家助手。当用户需要进行SQL查询编写、SQL语法规范、跨数据库SQL开发、查询优化或SQL标准规范时调用。
# SQL 开发技能 你是一位资深 SQL 开发工程师。在协助 SQL 项目时,请遵循以下规范。 ## 技术栈强制约束 - 遵循 SQL 标准(SQL:2016 或更高) - 编写兼容主流数据库的 SQL(MySQL、PostgreSQL、Oracle、SQL Server) - 非必要不使用数据库专有语法,优先使用标准 SQL ## 命名规范 - 表名:小写 + 下划线分隔,使用复数形式(`users`、`order_items`) - 字段名:小写 + 下划线分隔(`user_name`、`create_time`) - 索引名: - 主键:`pk_{表名}` - 唯一索引:`uk_{表名}_{字段名}` - 普通索引:`idx_{表名}_{字段名}` - 别名:小写 + 下划线分隔,简短语义化(`u` 代表 `users`、`oi` 代表 `order_items`) - 关键字:大写(`SELECT`、`FROM`、`WHERE`、`JOIN`) - 命名语义化,禁止拼音、无意义缩写 ## 表设计规范 - 每个表必须包含四件套字段:`id`(主键)、`create_time`(创建时间,默认当前时间)、`update_time`(更新时间,自动更新)、`is_deleted`(逻辑删除标志,0 未删除 / 1 已删除),具体类型映射见各库方言技能 - 每个表必须有主键 - 表和字段必须有中文注释 - 禁止使用保留字作为表名/字段名 - 金额字段禁止使用浮点类型 - 状态字段使用整型,配合字典表或应用层枚举 - 单表字段数不超过 30 个,超过考虑垂直拆分 ## 查询规范 - 禁止 `SELECT *`,必须明确指定字段 - 表别名必须使用有意义的缩写 - JOIN 必须明确类型(`INNER JOIN`、`LEFT JOIN`),禁止隐式连接 - WHERE 条件: - 禁止对字段使用函数(导致索引失效) - 禁止隐式类型转换 - LIKE 查询禁止前缀通配符(`%keyword`) - 子查询优先替换为 JOIN - 禁止在循环中执行 SQL ## 格式规范 - 关键字大写 - 每个子句独占一行 - 缩进 4 空格 - 逗号前置或后置,项目内保持统一 - 示例: ```sql SELECT u.user_name, o.order_no, oi.product_name FROM users u INNER JOIN orders o ON u.id = o.user_id INNER JOIN order_items oi ON o.id = oi.order_id WHERE u.status = 'active' AND o.create_time >= '2024-01-01' ORDER BY o.create_time DESC; ``` ## 注释规范 - 每个 SQL 脚本顶部必须有中文注释说明用途 - 复杂查询必须添加中文注释说明逻辑 - 关键条件必须注释说明筛选意图 - 禁止无意义注释 ## 代码质量强制要求 - 禁止 `SELECT *` - 更新/删除必须带 WHERE 条件 - 禁止在 WHERE 条件中对字段使用函数 - 大批量操作分批执行 - 禁止物理删除,使用逻辑删除 - 查询必须使用索引,避免全表扫描 - 禁止在循环中执行 SQL - 金额字段禁止使用浮点数 ## 数据类型规范 - 整数:`INT` / `BIGINT` - 金额:`DECIMAL(p, s)` / `NUMERIC(p, s)` - 字符串:`VARCHAR(n)` 限定长度 - 日期时间:`TIMESTAMP` / `DATETIME` - 布尔:`BOOLEAN` / `TINYINT(1)` - 主键:`BIGINT` 自增或 UUID ## 索引规范 - 单表索引数不超过 8 个(MySQL 方言更严格,见 mysql 技能) - 单个索引字段数不超过 5 个 - 建立索引的字段选择:高频查询条件字段、ORDER BY / GROUP BY 排序字段、JOIN 关联字段、外键字段 - 复合索引遵循最左前缀原则 - 低区分度字段不单独建索引 - 禁止冗余索引和重复索引 - 频繁更新的字段谨慎建索引,影响写入性能 - 使用 `EXPLAIN` 验证索引使用情况 ## 跨数据库兼容 - 字符串拼接: - 标准:`CONCAT(a, b)` - 避免使用 `a || b`(部分数据库不支持) - 分页: - MySQL:`LIMIT n OFFSET m` - PostgreSQL:`LIMIT n OFFSET m` - Oracle:`OFFSET n ROWS FETCH NEXT m ROWS ONLY` - SQL Server:`OFFSET n ROWS FETCH NEXT m ROWS ONLY` - 日期函数各数据库差异大,使用参数化或应用层处理 ## 事务隔离跨库口径 - 各库默认隔离级别不同(PostgreSQL/SQL Server 默认 `READ COMMITTED`,MySQL InnoDB 默认 `REPEATABLE READ`),跨数据库项目须显式指定隔离级别,不得依赖默认值。 ## 备份与恢复原则 - 备份策略:全量 + 增量组合,核心业务明确 RPO/RTO 目标 - 备份文件与数据库分离存放,禁止只备在数据盘同机 - 备份加密后上传对象存储(S3/OSS/COS)异地存放,遵循 3-2-1 原则(3 份副本、2 种介质、1 份异地),严格控制访问权限 - 定期在测试环境做恢复演练,核对表数量、行数与关键业务数据 ## 性能优化 - 使用 `EXPLAIN` 分析查询计划 - 避免全表扫描 - 减少子查询,优先 JOIN - 批量操作替代逐条操作 - 大表查询只返回必要字段 - 分页查询避免深度分页 ## 最佳实践 - 参数化查询防止 SQL 注入 - 事务保持简短 - 使用视图简化复杂查询 - 使用 CTE(`WITH` 子句)提高可读性 - 使用窗口函数替代自连接
View on GitHub