MySQL字段默认值设置详解

我对数据库了解很多。
我告诉你,我在一家电子商务公司工作,当时我们大量使用MySQL。
为字段设置默认值其实非常重要,可以为你省去很多麻烦。

一个冬天,当我们运行一个活动时,一位朋友编写了一个新脚本来插入产品数据,但忘记向“产品状态”字段传递一个值。
本来默认值应该是“For Sale”,但结果发现这是一个陷阱,因为数据库在上传之前就崩溃了,所以花了很长时间。
因此,在设置默认值时,尤其是“待售”或“现货”等产品状态时,建议使用tinyint类型将默认值设置为1 或0。
使用char或varchar。
如果传了空字符串什么的,就得改,比较麻烦。

创建表时,在字段中添加DEFAULT。
示例:
sql 创建表产品( ID INT AUTO_INCRMENT 主键; 名称 VARCHAR(2 5 5 ) NOT NULL; 状态 TINYINT 默认值 1 );
如果您的任务不以这种方式发送状态,它会自动使用 1 (待售)。
我记得这里我写了一个更新库存的脚本,忘记传递状态了。
我注意到它仍然使用默认值。
否则你的数据将会混乱。

许多人还喜欢使用 DEFAULT CURRENT_TIMESTAMP 来记录创建时间。
我之前在一个项目上尝试过,一开始觉得还不错。
但是,后来我发现无法连接,因为一些较旧的系统不支持此功能或存在时间同步问题。
所以这取决于。
我记得有一个夏天。
我们连接到旧系统,并手动填写时间戳。
后来是手动填充而不是自动填充。

修改默认值很容易。
您只需要执行 ALTER TABLE:
sql。
更改表产品修改列状态 TINYINT 默认 0;
我曾经有一个项目,老板临时改变了需求,说要把“下架”状态改为2 ,于是他自己改变了默认值,并移动了所有数据,所以数据库几乎失败了。
因此,更改默认值时应该非常小心,最好先备份它们。

设置默认值通常是一个很好的做法,但是您应该在正确的地方使用它们,而不是盲目使用它们。
Tinyint 是最容易使用的,特别是对于状态字段。
多尝试一下你就会明白。

Navicat for MySQL 15使用教程:何时使用默认值以及如何选用恰当的默认值

嗯,你说得完全正确。
我自己在使用Navicat写MySQL的时候也遇到过这种情况。

例如,去年我在上海做一个项目。
表格中有一个“状态”字段,所以我想默认填写“等待审核”。
结果后来发现程序在执行过程中有时会错误地估计默认值就是真实状态,导致后面检查数据时出现混乱。
因此,设置默认值并不能简单地避免问题。

看: 1 . 数据完整性确实非常重要。
例如,如果你创建一个用户表,“手机号码”列不允许空格,你给它一个默认的空字符串,那肯定是不行的。
我以前也曾被困在某个系统里。
我忘了那是哪一年、什么项目了。
无论如何,我忘记设置必填字段的默认值。
结果,后台崩溃了。
这是一场悲剧。
因此,如果不允许留空,最好提供一个有意义的默认值或直接在应用程序级别进行测试。

2 简化注册流程并没有什么错。
例如,对于创建时间和创建者,使用当前时间戳和系统用户名作为默认值实际上可以省事。
上次在北京做电商系统时,订单表单中的“订单时间”自动填写为当前时间,“订单用户”输入的是当前注册用户。
效率要高得多。

3 用户体验方面也是如此。
想想看,在登录表单中,密码框前面有一个默认文本“输入您的密码”,用户只需滚动浏览它即可。
我在广州教几位新同事如何做前端工作,特别强调了这一点。

但是如何选择默认值呢?你提到的几点非常关键:
业务逻辑必须正确。
例如,age默认填充为0吗?肯定不行的。
上次在深圳帮朋友看代码。
它有一个名为“Activities”的表,默认填充 1 00。
结果用户每次登录就变成了2 00,这让他很着急。

数据准确性。
时间戳必须准确,不能相差几个小时。
我在成都创建了一个预订系统,默认输入的是系统时间。
结果,服务器时间没有正确调整,整个预订都被搞乱了。

切勿选择容易误导的值。
例如,默认填写“是/否”可能会导致歧义。
我在杭州调试了一个表单,默认勾选了“接受协议”。
结果用户连看都不看就发了,投诉的人几乎铺天盖地。

但是,在设置默认值之前,请考虑更多步骤。
这不仅仅是编译一些东西。
想想这个值会用在什么地方,别人看到它会不会有疑问,会不会导致程序崩溃。
我仍在思考一个问题,即是否应该在应用程序级别而不是数据库级别设置一些默认值?我还在想。

MySQL如何设置默认值 字段默认值设置与修改指南

要在 MySQL 中设置默认值,只需使用 DEFAULT 关键字即可。
创建表时,在字段定义后添加默认值DEFAULT。
例如:
TIMESTAMP 字段:像这样 SQL Registration_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP
这意味着在插入数据时,如果该字段没有填充值,MySQL将自动使用当前时间戳。

数字和字符串字段也是如此: SQL 价格 DECIMAL(1 0.2 ) 默认 0.00 amount INT DEFAULT 0
默认价格为 0.00,默认数量为 0。

要更改现有表的默认字段值,请使用 ALTER TABLE: SQL ALTER TABLE products ALTER COLUMN amount SET DEFAULT 1 0;
将产品表中数量字段的默认值从 0 更改为 1 0
如果要删除默认值: SQL ALTER TABLE products ALTER COLUMN amount DROP DEFAULT;
删除后,插入数据时,如果该字段没有设置为NOT NULL,则为NULL。

有以下几点需要注意: 1 . 默认值必须与字段类型匹配。
字符串不能用作 INT 字段的默认值。
2 、BLOB和TEXT类型字段不能设置默认值,否则会出错。
3 . NON-NULL字段必须有默认值或者在插入数据时手动填充。
4 . TIMESTAMP类型只能有一个字段,使用DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP。

默认情况下,TIMESTAMP 字段将自动更新为当前时间戳。
如果您不想自动更新,您可以: 1 .使用DATETIME类型: SQL 创建时间为 DATETIME 默认 CURRENT_TIMESTAMP
2 不要添加 ON UPDATE CURRENT_TIMESTAMP 属性: SQL 创建时间 TIMESTAMP 默认 CURRENT_TIMESTAMP
NULL值是相当烦人的,表示“未知”或“缺失”,这可能会导致计算错误或不正确的查询结果。
可以: SQL Price DECIMAL(1 0,2 ) NOT NULL DEFAULT 0.00
这样价格字段就不会为NULL。

MySQL 8 .0及更高版本也可以使用表达式作为默认值,例如函数、常量等。
但是不能使用子查询: SQL uuid VARCHAR(3 6 ) DEFAULT UUID()
每次插入新行时,uuid 字段都会自动生成一个新的 UUID。