mysql数据表设计
2022/8/3 2:23:02
本文主要是介绍mysql数据表设计,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
-
AUTO_INCREMENT 表示自增,UNSIGNED 表示无符号,UNIQUE 表示唯一约束,COMMENT为字段描述。DEFAULT表示默认值。NOT NULL表示不能为NULL。
-
Mysql 索引用idx_开头,唯一索引用uk_开头。
-
数字类型的状态数值,建议不要从0开始,0会被某些ORM框架(比如mybatis) 识别成空。
-
状态用数值类型表示时,如果业务变化比较快/复杂,建议用10,20,30之类的数字,如果后续新增中间的状态,可以用 11,12表示,方便拓展。
-
INT数据类型所表示的数值范围从 -2^31 到 2^31-1,可以用int数据类型来表达-2,147,483,648到2,147,483,647(即大约正负二十亿)之间的整数。
-
数字类型(INT、BIGINT、TINYINT)后面括号内的字段长度是用来表示该类型最多显示多少位的,类似于注释,并不起任何作用。
-
INT(10)和INT(4)没什么区别,直接写 INT 也可以。
-
BIGINT:超过INT的范围,需要用BIGINT。
-
VARCHAR要检查字段长度,写入时是否限制长度,太长会浪费存储空间,太短插入时会报错。
-
VARCHAR的长度最好比实际要求的稍长一些,留一些扩展性。
-
VARCHAR的DEFAULT默认值,最好设置成'',也就是 DEFAULT '',而不是NULL。NULL对统计、求和都会有影响。
-
存储精确浮点数,必须使用DECIMAL替代FLOAT和DOUBLE。
-
TINYINT: TINYINT 无符号的范围是0-255之间的数字。布尔类型,或者一些简单的数值。可以使用TINYINT(1),1表示是,2表示否。
-
TEXT类型,不可以有默认值。否则会报错 BLOB, TEXT, GEOMETRY or JSON column can't have a default value
-
涉及新增或变更操作记录的,必须有 create_time字段和update_time字段 ,方便定位问题。
-
DEFAULT CURRENT_TIMESTAMP表示默认当前时间,ON UPDATE CURRENT_TIMESTAMP 表示更新时默认当前时间。
-
删除数据,最好加一个is_delete的字段,为1时表示已失效,不要直接把数据删除,出现问题,方便溯源。
-
日期类型,使用 DATE.
-
日期时间类型,用 DATETIME 或者TIMESTAMP ,如果不需要支持多个时区,一般用 DATETIME. 因为TIMESTAMP 的最大值是2038年。
-
DATETIME 和 TIMESTAMP 区别如下:
datetime只支持一个时区,就是存储时当前服务器的时区,而timestamp存储的是与时区有关; datetime存储占用8个字节,而timestamp是占用4字节; timestamp插入NULL时会自动转换成当前时间.datetime插入NULL就是NULL.
示例如下:
CREATE TABLE t_order ( id INT NOT NULL AUTO_INCREMENT COMMENT '主键,自增id', order_id VARCHAR(25) NOT NULL UNIQUE COMMENT '订单号,唯一', pay_status INT UNSIGNED DEFAULT 0 COMMENT '10:未支付,20:支付成功,30:支付失败, 40:已下单,50:申请退款,60:退款成功,70:退款失败 ', user_id BIGINT(20) NOT NULL COMMENT '用户id', total_price DECIMAL(25, 2) DEFAULT 0.00 COMMENT '交易金额', result TEXT COMMENT '结果', order_desc VARCHAR(128) DEFAULT '' COMMENT '订单描述', order_date DATE DEFAULT NULL COMMENT '订单日期', create_time DATETIME DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间,默认当前时间', update_time DATETIME DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间,更新时默认当前时间', is_delete TINYINT(1) DEFAULT 0 COMMENT '是否删除,0表示否,1表示是', PRIMARY KEY (id), INDEX idx_order (order_id) ) ENGINE = INNODB DEFAULT CHARSET = utf8 AUTO_INCREMENT = 1 COMMENT ='示例表';
参考资料:
https://www.cnblogs.com/mxwz/p/7520309.html
这篇关于mysql数据表设计的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-12-25如何部署MySQL集群资料:新手入门教程
- 2024-12-24MySQL集群部署资料:新手入门教程
- 2024-12-24MySQL集群资料详解:新手入门教程
- 2024-12-24MySQL集群部署入门教程
- 2024-12-24部署MySQL集群学习:新手入门教程
- 2024-12-24部署MySQL集群入门:一步一步搭建指南
- 2024-12-07MySQL读写分离入门:轻松掌握数据库读写分离技术
- 2024-12-07MySQL读写分离入门教程
- 2024-12-07MySQL分库分表入门详解
- 2024-12-07MySQL分库分表入门指南