为什么MySQL在非空字段中插入空白数据

时间:2015-03-29 17:24:23

标签: mysql insert

我只是想知道是否有人可以解释这一点。

我只是测试我的代码,并没有检查空输入字段(我知道我必须,但只是测试)..在我的数据库表中,所有字段都是非NULL,我期待一个例外,因为我没有插入任何东西..但事实证明MySQL插入所有空白值,同样,从MySQL工作台也是同样的事情..

有没有办法防止这种情况发生? (从MySQL的角度来看)

1 个答案:

答案 0 :(得分:2)

这种行为虽然不典型,却很好documented

  

将NULL插入已声明为NOT NULL的列中。对于   多行INSERT语句或INSERT INTO ... SELECT语句,   该列设置为列数据的隐式默认值   类型。数字类型为0,字符串为空字符串('')   类型,以及日期和时间类型的“零”值。 INSERT INTO ... SELECT语句的处理方式与多行插入的处理方式相同   因为服务器不会检查SELECT中的结果集   看它是否返回一行。 (对于单行INSERT,没有   将NULL插入NOT NULL列时发生警告。代替,   该陈述失败并出现错误。)

因此,如果您想获得错误,请使用VALUES()一行。或者,定义执行检查的触发器。

为什么MySQL以这种方式工作?我不知道,要区别于其他数据库并阻止ANSI兼容性?更严重的是,我认为这是一个效率问题,并且与MySQL没有实现check约束的事实有关。 NOT NULL声明只是检查约束的一个示例,并且不支持这些声明。