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