在NOT NULL字段上设置name = NULL

时间:2012-05-31 15:47:06

标签: sql null

我无法弄清楚这是怎么回事,也许你们可以帮助我!

我有一个名为“NOT NOT NULL”的用户表。

这给我一个错误。

INSERT INTO `user` (name) values (NULL);`

这样可行,并将名称设置为''

UPDATE `user` SET name=NULL WHERE id = '1'

为什么我可以更新它?为什么我试图插入时没有向我显示相同的错误?

3 个答案:

答案 0 :(得分:3)

如果您使用的是MySQL,这是一个不是bug的错误。 http://bugs.mysql.com/bug.php?id=33699 它已修复,然后恢复修复。

  

此更改已恢复,因为原始报告已确定   不要成为bug:在UPDATE中为NULL NULL列分配NULL   语句只应在严格的SQL模式下生成错误并设置   列为隐式默认值,否则为警告   原始行为。

答案 1 :(得分:0)

假设您从空表开始,当您尝试插入具有空名称的用户并且它给出错误时,该表仍为空。更新命令不会给您一个错误,但因为没有id为1的行,所以没有更改任何行。如果您执行以下操作,它应该会给您一个错误:

INSERT INTO user (id, name) VALUES (1, "blah")
UPDATE user SET name=NULL WHERE id=1

编辑: 啊......你在我写答案时更新了你的问题。 在这种情况下,您是否有一个空字符串作为名称列的默认值?它可能正在使用它。

答案 2 :(得分:0)

您无法更新它。如果无法通过WHERE语句找到任何匹配项,则只能执行查询。在这种情况下,您没有收到错误,因为查询不会尝试更新任何行。