我已经通过
在mysql中创建了一个表create table test (id int primary key not null auto_increment, vs varchar(255) not null);
运行时
insert into test (vs) values (null);
它会抛出错误:
ERROR 1048 (23000): Column 'vs' cannot be null
但是当我尝试按
插入两行时insert into test (vs) values (null),(null);
它有效,结果是:
mysql> select * from test;
+----+----+
| id | vs |
+----+----+
| 1 | |
| 2 | |
+----+----+
字段vs不可为空,我想知道它是否是一个功能。
答案 0 :(得分:5)
这既不是错误也不是功能。这就是它在这种情况下的工作原理。 MySQL documentation - Constraints on Invalid Data中记录了此行为。
如果尝试将NULL存储到不带NULL值的列中,则单行INSERT语句会出现错误。 对于多行INSERT语句或INSERT INTO ... SELECT语句,MySQL Server存储列数据类型的隐式默认值。通常,对于数字类型,空字符串为0( '')表示字符串类型,“0”表示日期和时间类型。第11.7节“数据类型默认值”中讨论了隐式默认值。
当您关闭严格模式时会发生这种情况。