• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

MySQL数据库使用规范总结

mysql 搞代码 4年前 (2022-01-09) 22次浏览 已收录 0个评论

导读:

关于MySQL数据库规范,相信大家多少看过一些文档。本篇文章给大家详细分类总结了数据库相关规范,从库表命名设计规范讲起,到索引设计规范,后面又给出SQL编写方面的建议。相信这些规范适用于大多数公司,也希望大家都能按照规范来使用我们的数据库,这样我们的数据库才能发挥出更高的性能。

关于库:

1.【强制】库的名称必须控制在32个字符以内,英文一律小写。

2.【强制】库的名称格式:业务系统名称_子系统名。

3.【强制】库名只能使用英文字母,数字,下划线,并以英文字母开头。

4.【强制】创建数据库时必须显式指定字符集,并且字符集只能是utf8或者utf8mb4。创建数据库SQL举例:Create database db1 default character set utf8;

5.【建议】临时库、表名以tmp_ 为前缀,并以日期为后缀,备份库、表以 bak_ 为前缀,并以日期为后缀。

关于表

1.【强制】表和列的名称必须控制在32个字符以内,表名只能使用字母、数字和下划线,一律小写。

2.【强制】表名要求模块名强相关,同一模块使用的表名尽量使用统一前缀。

3.【强制】创建表时必须显式指定字符集为utf8或utf8mb4。

4.【强制】列名尽量不用关键字(如type,order等)。

5.【强制】创建表时必须显式指定表存储引擎类型,如无特殊需求,一律为InnoDB。

6.【强制】建表必须有comment。

7.【强制】对于超过100W行的大表进行alter table,必须经过DBA审核,并在业务低峰期执行,多个alter需整合在一起。

因为alter table会产生表锁,期间阻塞对于该表的所有写入,对于业务可能会产生本文来源gaodai#ma#com搞*!代#%^码$网!极大影响。

8.【建议】建表时关于主键:表必须有主键

(1)强制要求主键为id,类型为int或bigint,且为auto_increment 建议使用unsigned无符号型。

(2)标识表里每一行主体的字段不要设为主键,建议设为其他字段如user_id,order_id等,并建立unique key索引。

因为如果设为主键且主键值为随机插入,则会导致innodb内部page分裂和大量随机I/O,性能下降。

9.【建议】核心表(如用户表)必须有行数据的创建时间字段create_time和最后更新时间字段update_time,便于查问题。

10.【建议】表中所有字段尽量都是NOT NULL属性,业务可以根据需要定义DEFAULT值。

因为使用NULL值会存在每一行都会占用额外存储空间、数据迁移容易出错、聚合函数计算结果偏差等问题。

11.【建议】中间表用于保留中间结果集,名称必须以tmp_ 开头。备份表用于备份或抓取源表快照,名称必须以bak_开头。中间表和备份表定期清理。

12.【示范】一个较为规范的建表语句:

CREATE TABLE user_info ( `id` int unsigned NOT NULL AUTO_INCREMENT COMMENT '自增主键', `user_id` bigint(11) NOT NULL COMMENT '用户id', `username` varchar(45) NOT NULL COMMENT '真实姓名', `email` varchar(30) NOT NULL COMMENT '用户邮箱', `nickname` varchar(45) NOT NULL COMMENT '昵称', `birthday` date NOT NULL COMMENT '生日', `sex` tinyint(4) DEFAULT '0' COMMENT '性别', `short_introduce` varchar(150) DEFAULT NULL COMMENT '一句话介绍自己,最多50个汉字', `user_resume` varchar(300) NOT NULL COMMENT '用户提交的简历存放地址', `user_register_ip` int NOT NULL COMMENT '用户注册时的源ip', `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '修改时间', `user_review_status` tinyint NOT NULL COMMENT '用户资料审核状态,1为通过,2为审核中,3为未通过,4为还未提交审核', PRIMARY KEY (`id`), UNIQUE KEY `uniq_user_id` (`user_id`), KEY `idx_username`(`username`), KEY `idx_create_time_status`(`create_time`,`user_review_status`)) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='网站用户基本信息'

搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:MySQL数据库使用规范总结

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址