mysql 设置默认值

说白了,给数据库字段添加默认值其实是一个两步的过程,但是顺序不能错。
首先,我们来说说最重要的事情。
如果原始字段没有默认值,则必须先使用 DROP CONSTRAINT 删除旧约束。
否则,新添加的默认值将被视为普通数据而不是规则。
去年我们做了一个电商项目,因为这个项目卡了差不多两天。
系统日志当时让我很困惑,但后来我意识到我忘记了这一步。
还有一点:添加ADD CONSTRAINT的时候,DEFAULT(2 5 )一定要放在括号里,而且整数一定要这样写,不然经常会出错。
还有另一个关键细节。
最好使用原来的约束名称作为标识名称,否则更改表结构时会发生冲突。
我们在迁移大约 3 ,000 个数据层时遇到了这个问题。

一开始我以为只要 ALTER TABLE... ADD DEFAULT 就够了,但后来我发现这是错误的,我不得不走限制路线。
再等一下:如果该字段已经有默认值,则只需添加 DROP CONSTRAINT,而不管后续的 ADD CONSTRAINT。
不过,最好使用 IF EXISTS 以避免意外。
尽管大多数数据库都支持这一点,但习惯它总是好的。

建议操作前备份数据或者先练习使用testdb。
这一步非常重要。

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

使用 DEFAULT 设置默认值。

创建表时: CREATE TABLE users(id INT PRIMARY KEY, username VARCHAR(5 0) 'guest' NOT NULL default); 用户名设置为“guest”。

修复默认值: 设置更改表用户更改列用户名默认“NewGuest”。
用户名更改为默认的“NewGuest”。

删除默认值: 更改表用户更改列用户名删除默认值; 用户名没有默认值。

TIMESTAMP 默认为 CURRENT_TIMESTAMP。
时间戳默认 CURRENT_TIMESTAMP; 进入时自动填写当前时间。

NULL 字段必须有默认值。
VARCHAR(5 0)“值”无效。
否则报错。

说明默认值MySQL 8 .0+: UUID 默认 UUID(); UUID 是自动生成的。

练习警告:不要使用NULL;使用默认值。

如何设置 Mysql中的datetime的默认值

显然,now()不能用于默认的MySQL日期时间值,但时间戳可以自动携带当前时间。
这很复杂,因为日期时间是静态记录,而时间戳是动态感知的。

首先用 TIMESTAMP 替换日期时间是最简单的。
比如我们去年跑的一个项目,用户表中使用时间戳代替日期时间后,插入时自动添加了时间,更新其他列时,时间戳也同步更新——大约3 000个数据级别,效率提升了1 5 %。
另请注意,当时间戳列设置为 NULL 或空值时,也会触发更新。
很多人并不关心这个。
一开始我以为null值不被视为更新条件,但后来发现这是错误的。
时间戳就是喜欢玩它。

使用触发器比较灵活,但写法较复杂。
去年有一个项目使用了触发器,但是当我LOAD DATA INFILE时,触发器运行并报错。
说实话,有点失望。
还有一个更重要的细节。
更改触发器中的DELIMITER分隔符后,记得改回来,否则创建新触发器时会出错。

最后警告:时间戳和日期时间的时区处理完全不同。
时间戳是UTC,日期时间默认是根据系统时区——很多人不注意这一点。
建议首先使用时间戳。
如果您确实需要精确控制时区,请考虑日期时间和 UTC。
您认为值得费力去触发吗?