MySQL安全模式:满足要求?

时间:2018-07-21 02:36:59

标签: mysql safe-mode

我知道我可以在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实际上要求我对键列做什么?

1 个答案:

答案 0 :(得分:1)

MySQL SQL_SAFE_UPDATES 防止您误用UPDATEDELETE语句中的键。 MySQL引擎经过优化,可以理解给定的某些条件。


... WHERE `id` IS NOT NULL;

主键永远不能为null,因此始终为true

... WHERE `id`=`id`;

... WHERE TRUE;

这些被认为是滥用密钥。禁止使用它们。