MySQL笔记整理(一)

2020-05-11  本文已影响0人  guaren2009

一、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的表更易损坏

上一篇下一篇

猜你喜欢

热点阅读