为了账号安全,请及时绑定邮箱和手机立即绑定

关于mysql建表规范

关于mysql建表规范

PHP
慕沐林林 2019-03-12 02:40:25
如图,我建了一张这样的表,从mysql可优化的角度来说,是否规范?我把所有字段都not null,然后给了默认值
查看完整描述

5 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

我先说下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类型占用资源更大,读取速度也慢,你存时间戳就行;

查看完整回答
反对 回复 2019-03-18
?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

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

https://img1.sycdn.imooc.com//5c8f67e0000109bf08000031.jpg

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

查看完整回答
反对 回复 2019-03-18
?
动漫人物

TA贡献1815条经验 获得超10个赞

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

查看完整回答
反对 回复 2019-03-18
?
森栏

TA贡献1810条经验 获得超5个赞

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

查看完整回答
反对 回复 2019-03-18
  • 5 回答
  • 0 关注
  • 405 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信