类型 |
规范 |
限制 |
||||||||||
tinyint |
在范围小于int,smallint类型的情况下尽可能使用,可以存储空间
|
DEFAULT 0 NOT NULL |
||||||||||
int |
可以使用int就不要使用varchar、char 字符尽可能转化为数字,例如性别,类型等
|
DEFAULT 0 NOT NULL NOT NULL AUTO_INCREMENT |
||||||||||
float,double |
不要求计算或着精度要求低时使用,避免使用
|
DEFAULT 0 NOT NULL |
||||||||||
decimal |
科学财务计算、高速数学计算、科学计算、卫星定位计算等相关必须使用
|
DEFAULT 0 NOT NULL |
||||||||||
varchar |
用尽量少的存储空间来存储一个字段的数据
|
DEFAULT '' NOT NULL |
||||||||||
char |
固定长度的类型最好使用
|
DEFAULT '' NOT NULL |
||||||||||
enum |
尽可能避免使用,修改ENUM值须要使用ALTER语句,ENUM类型的ORDER BY操作效率低,需要额外操作
|
DEFAULT ENUM('保密') NOT NULL DEFAULT ENUM('') NOT NULL |
||||||||||
datetime |
完整的年份日期使用,无需转区 |
DEFAULT CURRENT_TIME NOT NULL DEFAULT LOCALTIME NOT NULL |
||||||||||
timestamp |
优先使用,当超过范围不使用,完成年份时间时间戳,需要进行时区转换 |
DEFAULT CURRENT_TIME NOT NULL DEFAULT LOCALTIME NOT NULL |
||||||||||
year |
仅储存年份时使用 |
DEFAULT '2022' NOT NULL |
||||||||||
date |
仅储存日期时使用 |
DEFAULT '0000-00-00' NOT NULL |
||||||||||
time |
仅储存时间时使用 |
DEFAULT '01:00:00' NOT NULL DEFAULT '000000' NOT NULL |
||||||||||
TEXT、BLOB |
避免使用,建议把BLOB或是TEXT列分离到单独的扩展表中 |
|
注
- 避免使用NULL字段(NULL字段很难查询优化、NULL字段的索引需要额外空间、NULL字段的复合索引无效)
- 有关日期更新,可在datetime和timestamp的字段后添加ON UPDATE CURRENT_TIMESTAMP
- 在5.5和之前的版本中,如果一个表中有多个timestamp列,那么最多只能有一列能具有自动更新