我知道我可以在MySQL中关闭安全模式,因此我不会尝试解决这一问题。
我有一个简单的表:
create table rubbish(
id int auto_increment primary key,
stuff text,
nonsense text
);
id
是主键。
打开安全模式后,我尝试以下操作:
update rubbish set nonsense=stuff where id=id; -- fails
update rubbish set nonsense=stuff where id is not null; -- fails
update rubbish set nonsense=stuff where id<>0; -- works
该错误消息与MySQL中的大多数错误消息一样没有帮助:
You are using safe update mode and you tried to update
a table without a WHERE that uses a KEY column
在所有情况下,我都使用键列,因此该消息无济于事。 MySQL实际上要求我对键列做什么?
答案 0 :(得分:1)
MySQL SQL_SAFE_UPDATES
防止您误用UPDATE
和DELETE
语句中的键。 MySQL引擎经过优化,可以理解给定的某些条件。
... WHERE `id` IS NOT NULL;
主键永远不能为null,因此始终为true
。
... WHERE `id`=`id`;
和
... WHERE TRUE;
这些被认为是滥用密钥。禁止使用它们。