我只是无法弄清楚这是怎么回事,也许你们可以帮助我!
我有一个带有“name NOT NULL”的用户表。
这给了我一个错误。
INSERT INTO `user` (name) values (NULL);`
这有效,并将名称设置为''
.
UPDATE `user` SET name=NULL WHERE id = '1'
为什么我可以更新它?为什么当我尝试插入时它没有向我显示相同的错误?
如果您使用的是 MySQL,这是一个不是错误的错误。 http://bugs.mysql.com/bug.php?id=33699 已修复,然后修复被恢复。
此更改已恢复,因为原始报告已确定不是错误:将 NULL 分配给 UPDATE 语句中的 NOT NULL 列应仅在严格 SQL 模式下产生错误,并将该列设置为隐式默认值,否则会发出警告,这是最初的行为。
你不能更新它。如果无法通过 WHERE 语句找到任何匹配项,则只能执行查询。在这种情况下,您没有收到错误,因为查询不会尝试更新任何行。
假设您从一个空表开始,当您尝试插入一个具有空名称的用户并且它给您一个错误时,该表仍然是空的。update 命令不会给你报错,但是因为没有id为1的行,所以没有行被改变。如果您执行以下操作,它应该会给您一个错误:
INSERT INTO user (id, name) VALUES (1, "blah")
UPDATE user SET name=NULL WHERE id=1
编辑:啊......在我写答案时你更新了你的问题。在这种情况下,您是否有一个空字符串作为名称列的默认值?它可能正在使用它。