MySQL 建表核心规约 SKILL.md---name: mysql-table-standarddescription:本技能文档总结了生产环境下 MySQL 建表的最佳实践,包括命名规范、引擎与字符集、字段类型选择、主键与索引、约束与默认值、安全设计要点以及常见错误避免。适用于团队内部统一数据库设计规范,保证高性能、易维护和安全合规。MySQL建表规范,用于设计、生成、评审、整改生产级MySQL表结构;用户说建表、生成DDL、检查表规范时自动触发。version: 1.1.2author: Linux小讲堂---## 一、命名规范(强制)### 1. 库名 / 表名- 全小写,下划线分隔,见名知意,≤32 字符- 表名用单数(如:user 而非 users)- 禁止数字开头、两个下划线中间夹数字(如:level_3_name 不行)- 禁用保留字(如:descrangematch)- 前缀规范:  - 用户:user_xxx  - 系统:sys_xxx  - 日志:log_xxx  - 临时表:tmp_xxx_日期  - 备份表:bak_xxx_日期### 2. 字段名- 全小写 + 下划线,≤32 字符- 布尔 / 逻辑位:is_xxx,类型 unsigned tinyint(1 = 是,0 = 否)  - 例:is_deleted(逻辑删除)、is_valid- 时间:created_atupdated_atdeleted_at- 外键:关联表名_id(如:user_idorder_id)### 3. 索引命名- 主键:pk_表名(如:pk_user)- 唯一索引:uk_表名_字段(如:uk_user_phone)- 普通索引:idx_表名_字段(如:idx_user_name)---## 二、引擎与字符集(强制)- 存储引擎:必须 InnoDB(支持事务、行锁、高并发)- 字符集:必须 utf8mb4(支持 emoji),排序规则 utf8mb4_unicode_ci- 行格式:推荐 DYNAMIC(节省空间、支持大字段)---## 三、字段类型选择(核心,强强制)### 1. 数值型- 非负数:必须 unsigned- tinyint:状态、开关、年龄(0-255)- smallint:短编号、小数量(0-65535)- int:普通 ID、计数(推荐)- bigint:主键、大表 ID(必用)- 小数:decimal(M,D),禁止 float/double(精度丢失)### 2. 字符串- 短文本(≤255):varchar(n),n 按实际设定(如手机号 varchar(11))- 长文本:text,尽量少用,大字段放附件 / 对象存储- 禁止 char(除固定长度如手机号)### 3. 时间- 推荐:datetime(3)(精确到毫秒,无时区问题)- 不推荐:timestamp(2038 年问题、时区转换)- 禁止用字符串存时间### 4. 逻辑删除- 必须:is_deleted unsigned tinyint NOT NULL DEFAULT 0- 0 = 正常,1 = 删除;禁止物理删除---## 四、主键与索引(生产重中之重)### 1. 主键(强制)- 每张表必须有主键,推荐:id bigint unsigned auto_increment primary key- 禁止:联合主键、字符串主键、无主键- 主键永不更新### 2. 索引(强建议)- 原则:少而精,覆盖 80% 查询,避免过度索引- 必建:  - 主键(必选)  - 唯一字段(如手机号、身份证)建唯一索引  - 高频查询 / 排序 / 过滤字段建普通索引- 不建:  - 低基数列(如性别、状态,选择性 < 0.2)  - 频繁更新字段  - 过长字段(>50),用前缀索引- 联合索引:最左匹配,高频字段放左边---## 五、约束与默认值(强制)- 字段默认值:必须显式指定,禁止 NULL(除非业务确实允许空)  - 字符串:DEFAULT ''  - 数值:DEFAULT 0  - 时间:DEFAULT CURRENT_TIMESTAMP- 禁止外键(应用层保证一致性)- 禁止级联删除 / 更新---## 六、字段分类与存储方式- 普通业务字段:如用户名、邮箱,VARCHAR + NOT NULL- 非敏感扩展字段:如用户偏好,使用 JSON 存储- 敏感隐私字段:如手机号、身份证号,VARBINARY + AES_ENCRYPT- 密码字段:必须在应用层使用不可逆哈希(bcrypt/Argon2),数据库只存储哈希值---## 七、安全设计要点- 加密 vs 哈希:  - 手机号、身份证号 → 可解密(AES)  - 密码 → 不可逆哈希(bcrypt/Argon2)- 密钥管理:AES 密钥必须安全存储,不能硬编码在 SQL- 访问控制:限制敏感字段查询权限---## 八、常见错误避免- 错误1:用 AES 存储密码 → 不安全- 错误2:JSON 字段无索引 → 查询性能差- 错误3:使用 utf8 而不是 utf8mb4 → Emoji 不支持- 错误4:字段无注释 → 维护困难---## 九、输出格式当生成/检查表时,输出:- 合规 DDL- 字段说明(类型/默认/注释)- 索引说明- 风险提示(如有)