1

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

我有一个带有“name NOT NULL”的用户表。

这给了我一个错误。

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

这有效,并将名称设置为''.

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

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

4

3 回答 3

3

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

此更改已恢复,因为原始报告已确定不是错误:将 NULL 分配给 UPDATE 语句中的 NOT NULL 列应仅在严格 SQL 模式下产生错误,并将该列设置为隐式默认值,否则会发出警告,这是最初的行为。

于 2012-05-31T16:08:52.140 回答
0

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

于 2012-05-31T15:57:25.077 回答
0

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

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

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

于 2012-05-31T15:56:06.833 回答