MySQL建表规范

MySQL规范–建表规范

规范的表结构能降低MySQL出现问题的概率,下面总结一些MySQL的建表规范

1、库名、表名、字段名全部采用小写格式。

这是防止出现大小写不一致导致找不到对应表的情况。

2、避免使用MySQL的保留字。

使用mysql时一定要注意,尽量不要使用它的保留字作为表名或者列名,否则会出现莫名其妙的错误。如果之前用了,在sql语句中就用``包括起来。

3、表名、列名建议不要超过30个字符。

4、临时库表、备份库表的命名

临时库表必须以tmp加上日期为后缀,比如user_info_tmp_20221109。
备份库表必须以bak加上日期为后缀,比如user_info_bak_20221109。

5、索引命名

非唯一索引建议按照”idx字段名”进行命名。
唯一索引建议按照 “uniq_字段名”进行命名。

6、主键的建议

表必须有主键。
不使用有业务意义的的列作为主键,以免收到业务变化的影响。
不使用更新频繁的列作为主键。
不使用UUID、MD5等作为主键,因为它们可能会导致数据过于离散。
建议使用非空的唯一键作为主键,并配置自增或者发号器。

7、建议使用 InnoDB

InnoDB 具有支持事务、行锁设计、在高并发场景下性能更好等特性。因此在绝大多数业务场景下,InnoDB 都是唯一选择。

8、使用 utf8mb4 字符集,数据排序规则使用 utf8mb4_general_ci

utf8mb4 为万国码,无乱码风险;与 utf8 编码相比,utf8mb4 支持 Emoji 表情。

9、所有表、字段都需要增加 comment 来描述此表、字段的含义

10、如无特殊要求,表必须包含记录的创建时间和更新时间的字段

11、用尽量少的存储空间来存储一个字段的数据

能用 int 的就不用 char 或 varchar
能用 tinyint 的就不用 int
使用 unsigned 存储非负数值

12、尽可能不使用 text 和 blob 类型

使用 text 或 blob 类型,会浪费更多的磁盘空间和内存空间。如无法避免使用 text 或 blob 类型,则建议独立出一张表,使用主键或其他唯一的字段来对应,以避免影响原有表的查询效率。

13、禁止在数据库中存储明文密码

数据安全第一,防止密码泄露

14、索引设计

在设计索引时,建议考虑以下因素:
经常作为条件、排序、join关联的字段,建议加上索引。
单表索引数不建议过多,因为索引也会占用空间。
如果可以使用覆盖索引,或者几个字段经常同时作为条件,则可以考虑使用联合索引。
不在低基数的列上创建索引,如性别字段。

15、不建议使用外键

在有外键的情况下,update 操作和 delete 操作都会涉及相关联的表,不仅会影响 SQL 的性能,还会大大增加死锁出现的概率

16、线上业务禁止使用存储过程、视图、触发器、Event 等

在高并发的情况下,这些功能很可能会影响数据库的性能,如果有类似的需求,则建议把这些逻辑放到服务层实现

17、单表字段数不宜过多,建议小于 30 个字段,也可根据业务场景确定