一、MySQL建表规范
模板示例:
create table 表名(
id int(11) not null auto_increment comment 'id自增长',
name varchar(255) comment '姓名',
age int(3) comment '年龄',
.....
.....
create_user varchar(255) comment '创建人',
create_time timestamp not null default current_timestamp comment '创建时间',
update_user varchar(255) comment '更新人',
update_time timestamp not null default current_timestamp on update current_timestamp comment '更新时间',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 comment '表注释';
具体示例:
create table ruoze_t1(
id int(11) not null auto_increment comment 'id自增长',
name varchar(255) comment '姓名',
age int(3) comment '年龄',
create_user varchar(255) comment '创建人',
create_time timestamp not null default current_timestamp comment '创建时间',
update_user varchar(255) comment '更新人',
update_time timestamp not null default current_timestamp on update current_timestamp comment '更新时间',
primary key(id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 comment '表注释';
二、注意点
2.1、表名称和字段不要用中文或者拼音
2.1、要有固定统一的风格
与系统中原有的表保持风格一致
2.3、第一个字段必须是id主键自增,无业务意义
主要参考https://www.jianshu.com/p/b8d6d809fce3
(1)主键自增节省存储空间
相对于UUID做主键,用自增id做主键更节省空间,尤其是Innodb引擎下,二级索引中存储的是主键的值,这样也可以减小索引的大小
(2)对Innodb这种聚集型索引友好
Innodb这种聚集索引,数据是按照主键进行排序的。而UUID的无序性导致在插入数据的时候,在Innodb引擎的情况下,IO压力较大,插入效率降低
2.4、一张表只有一个主键
2.5、创建人、创建时间 、更新人、更新时间务必加上
2.6、comment注释务必加上
实际生产中,表和字段没有注释实在是太坑了
2.7、明确指定engine和charset字符集
这个是经常遇到的坑,如果不明确指定,引擎和字符集会按照所在库的引擎和字符集来设置,容易引发一些问题,例如字符集默认是latin1导致中文乱码
我们生产中(MySQL5.6)因历史遗留问题,一个库的引擎建为MyISAM,而以前建表的时候没有指定引擎,也没人在意这个,导致库中存有大量的MyISAM表,而某次的MySQL意外宕机,导致表损坏,查询数据时出现:Incorrect key file for table: '...'. Try to repair it的问题,修复起来是真的慢。
从实践认知来看,MyISAM引擎除了事务、锁等与Innodb有不同以外,MyISAM的表更易损坏
作者:俏不可爱