【mysql】关于mysql建表规范

【mysql】关于mysql建表规范

如图,我建了一张这样的表,从mysql可优化的角度来说,是否规范?我把所有字段都not null,然后给了默认值

回答

关于你的问题,楼上都回答了,我贴下我待过的公司的mysql建表规范,参考下。

- 数据类型尽量用数字类型,数字类型的比字符类型的要快很多,比如使用INT UNSIGNED存储IP

- 大数据字段最好剥离出单独的表,以便影响性能

- 使用varchar,代替char,这是因为varchar会动态分配长度

- 数据类型尽量小,这里的尽量小是指在满足可以预见的未来需求的前提下的,但是有不能太小,所以在建表的时候一定要预估这个字段最大的长度到底是多少

- 不允许NULL,用NOT NULL+DEFAULT 的值来代替

- 少用TEXT和IMAGE,二进制字段的读写是比较慢的,而且,读取的方法也不多,大部分情况下最好不用

- 表名 字段名字统一用小写

- 字段名字不要用驼峰命名法 比如add_time 不要写成AddTime

- 字段命名关键字统一用下划线"_"分割,一般采用简写,关键字要准确,不能有歧义

- 所有的表必须包含id(自增主键),add_time(新增时间),update_time(更新时间),mark(删除标记 )这3个字段

- 每个字段的COMMENT必须写清楚,枚举类型必须写清楚每个值到底是什么意思,枚举的写法统一成“删除标记(0:未删除,1:已经删除)”,符号为中文符号

- update_time(更新时间)字段自动修改。`update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间 '

- 时间类型尽量用 timestamp 4个字节,而不用datetime 8个字节。只用表示日期的字段用date类型

- 建表语句不允许包含外键

- 库、表、字段字符集统一使用UTF8。

我先说下int的各种大小类型:
bigint
从 -2^63 (-9223372036854775808) 到 2^63-1 (9223372036854775807) 的整型数据(所有数字)。存储大小为 8 个字节。

int
从 -2^31 (-2,147,483,648) 到 2^31 - 1 (2,147,483,647) 的整型数据(所有数字)。存储大小为 4 个字节。int 的 SQL-92 同义字为 integer。

smallint
从 -2^15 (-32,768) 到 2^15 - 1 (32,767) 的整型数据。存储大小为 2 个字节。

tinyint
从 0 到 255 的整型数据。存储大小为 1 字节。

首先status这个字段用int有点浪费了,使用tinyint就行;像其它的你可以根据你自己的大小来判断使用什么;至于时间我推荐int,用DATETIME的话比int类型占用资源更大,读取速度也慢,你存时间戳就行;

那三个时间不应该是INT的
应该是DATETIME

即使你存的是时间戳也应该是个TIMESTAMP的

status 只存状态值的话可以改为TINYINT
days、count、send_count可以根据实际业务调整成MEDIUMINT,
比如days字段,MEDIUMINT在UNSIGNED下范围是0~16777215 ≈ 4万多年,有效天数我想绝对够用了,节省存储空间。

状态这种字段一般在tinyint(1)和enum中选,个人喜欢tinyint
时间用datetime时默认值请给1000-01-01 00:00:00

以上是 【mysql】关于mysql建表规范 的全部内容, 来源链接: utcz.com/a/75693.html

回到顶部