MySQL添加一个NOT NULL列

时间:2014-04-04 16:37:29

标签: mysql sql

我正在向表中添加一列:

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

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

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

1 个答案:

答案 0 :(得分:36)

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

  

对于字符串类型[隐式]默认值为空字符串。

如果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语句,但不会影响添加列时的隐式默认用法。

  

对于没有显式DEFAULT子句的NOT NULL列的数据输入,如果 INSERT或REPLACE语句不包含列的值[和if]启用了严格的SQL模式,则会发生错误..

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


1 这是一个MySQL功能。其他引擎(如SQL Server)需要对此类架构更改使用显式DEFAULT(或NULL列)约束。