gpt4 book ai didi

MySQL 添加一个 NOT NULL 列

转载 作者:IT老高 更新时间:2023-10-28 23:42:56 39 4
gpt4 key购买 nike

我正在向表中添加一列:

ALTER TABLE t ADD c varchar(10) NOT NULL;

列被添加,每条记录都有空字符串。

这是否有望在 MySQL 5.5+ 中的所有条件(严格模式等)下以这种方式工作?

最佳答案

在 MySQL 中,每个列类型都有一个 "implicit default" value .

For string types [the implicit] default value is the empty string.

如果 NOT NULL 列是 added to a table ,并且未指定显式 DEFAULT,则使用隐式默认值填充新列数据1。指定 DEFAULT 值时适用类似规则。

因此,原始 DDL 产生的结果与以下内容相同:

-- After this, data will be the same, but schema has an EXPLICIT DEFAULT
ALTER TABLE t ADD c varchar(10) NOT NULL DEFAULT ''
-- Now we're back to the IMPLICIT DEFAULT (MySQL stores NULL internally)
ALTER TABLE t ALTER c DROP DEFAULT

“严格”模式设置会影响依赖默认值的 DML 语句,但不会影响添加列时的隐式默认用法。

For data entry into a NOT NULL column that has no explicit DEFAULT clause, if an INSERT or REPLACE statement includes no value for the column [and if] strict SQL mode is enabled, an error occurs ..

这里是 an sqlfiddle "proof"该严格模式不适用于 ALTER TABLE .. ADD 语句。


1 这是 MySQL 的一项功能。其他引擎,如 SQL Server,需要明确的 DEFAULT(或 NULL 列)约束才能进行此类架构更改。

关于MySQL 添加一个 NOT NULL 列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22868345/

39 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com