MySQL作为常用的关系型数据库,其对象的命名规范直接影响数据库的可读性和后续维护效率,统一的命名规则能让团队协作更顺畅,也能降低后期迭代的成本。

MySQL命名通用基础规则
所有MySQL对象的命名都需要遵循一些基础要求,这些规则是后续分类规范的前提:
- 命名只能使用字母、数字、下划线,禁止使用特殊字符、空格和中文,避免后续使用过程中出现转义问题
- 命名长度不能超过64个字符,不同对象的长度限制略有差异,但统一控制在30个字符以内更稳妥
- 命名要做到见名知意,尽量使用英文单词或者通用的英文缩写,不要使用拼音或者无意义的字符组合
- 禁止使用和MySQL保留字同名的命名,比如
select、order、table等,避免SQL执行报错
数据库命名规范
数据库作为最顶层的对象,命名需要体现业务属性,方便区分不同业务线的数据:
- 命名使用小写字母,多个单词之间用下划线分隔,比如业务相关的数据库可以命名为
user_service_db - 命名后缀统一加上
_db,明确标识这是数据库对象,避免和表名混淆 - 如果是测试环境的数据库,可以在后缀前加上
_test,比如user_service_test_db,和生产环境区分开
表命名规范
表的命名需要体现表的业务含义,同时和数据库命名风格保持一致:
- 统一使用小写字母,多个单词用下划线分隔,比如用户基础信息表可以命名为
user_base_info - 表名尽量使用单数名词,不要使用复数形式,比如用
user而不是users - 如果是关联表,命名需要包含关联的两个表名,比如用户和角色关联表可以命名为
user_role_rel - 临时表可以加上
tmp_前缀,备份表可以加上bak_前缀,比如tmp_user_202401、bak_user_202401
字段命名规范
字段是表中存储数据的基本单元,命名需要清晰体现字段的含义和类型:
- 使用小写字母加下划线分隔,比如用户手机号字段可以命名为
user_mobile - 禁止使用数据库保留字,比如不要用
desc作为描述字段的命名,可以改用description - 布尔类型的字段建议加上
is_前缀,比如是否删除字段可以命名为is_deleted,取值用0和1表示 - 主键字段统一命名为
id,如果是业务主键可以加上业务前缀,比如user_id - 外键字段需要和关联表的主键命名保持一致,比如用户表的主键是
id,订单表的外键可以命名为user_id
索引命名规范
索引的命名需要体现索引的类型和对应的字段,方便后续排查索引问题:
- 普通索引前缀使用
idx_,后面跟上表名和字段名,比如用户表手机号字段的普通索引可以命名为idx_user_mobile - 唯一索引前缀使用
uk_,比如用户表邮箱字段的唯一索引可以命名为uk_user_email - 主键索引不需要单独命名,MySQL会自动生成,也可以显式命名为
pk_表名,比如pk_user - 全文索引前缀使用
ft_,比如文章表内容字段的全文索引可以命名为ft_article_content
其他对象命名规范
除了上述常见对象,视图、存储过程、函数等对象也需要遵循对应规范:
- 视图命名前缀使用
v_,比如用户订单统计视图可以命名为v_user_order_stat - 存储过程命名前缀使用
sp_,比如新增用户的存储过程可以命名为sp_user_add - 函数命名前缀使用
func_,比如计算用户年龄的函数可以命名为func_user_age - 触发器命名前缀使用
trg_,后面跟上表名和操作类型,比如用户表新增后的触发器可以命名为trg_user_after_insert
命名规范示例对比
下面通过正确和错误的命名示例,更直观地展示规范的用法:
| 对象类型 | 错误命名 | 正确命名 | 错误原因 |
|---|---|---|---|
| 数据库 | UserDB | user_service_db | 使用大写字母,没有加_db后缀,不符合小写加下划线的规则 |
| 表 | 用户信息表 | user_info | 使用中文命名,不符合只能使用字母数字下划线的规则 |
| 字段 | isdel | is_deleted | 布尔字段没有用下划线分隔,可读性差 |
| 索引 | index_mobile | idx_user_mobile | 没有使用普通索引的idx_前缀,无法快速识别索引类型 |
规范落地建议
要让命名规范真正落地,需要团队共同遵守:
- 在项目启动阶段就制定统一的命名规范文档,所有成员都需要熟悉规则
- 可以在代码评审环节加入命名检查项,不符合规范的SQL语句不允许合并
- 可以使用数据库管理工具的命名检查插件,在创建对象时自动提示不符合规范的命名
创建表的规范示例
下面是一个符合命名规范的用户表创建语句:
-- 创建用户基础信息表,符合表命名规范
CREATE TABLE user_base_info (
-- 主键id,符合字段命名规范
id INT UNSIGNED NOT NULL AUTO_INCREMENT COMMENT '用户主键ID',
-- 用户手机号,符合字段命名规范
user_mobile VARCHAR(20) NOT NULL COMMENT '用户手机号',
-- 用户邮箱,符合字段命名规范
user_email VARCHAR(100) NOT NULL COMMENT '用户邮箱',
-- 是否删除,布尔类型加is_前缀,符合字段命名规范
is_deleted TINYINT NOT NULL DEFAULT 0 COMMENT '是否删除,0未删除1已删除',
-- 创建时间
create_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
-- 更新时间
update_time DATETIME NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
PRIMARY KEY (id),
-- 普通索引,符合idx_前缀规范
INDEX idx_user_mobile (user_mobile),
-- 唯一索引,符合uk_前缀规范
UNIQUE INDEX uk_user_email (user_email)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户基础信息表';