MySQL安全模式:什么满足要求?

MySQL Safe Mode: What Satisfies the Requirements?

我知道我可以在 MySQL 中关闭安全模式,所以我不会尝试解决这个问题。

我有一个简单的table:

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

MySQL SQL_SAFE_UPDATES 防止您在 UPDATEDELETE 语句中滥用键 。 MySQL 引擎已优化以理解给定的一些条件。


... WHERE `id` IS NOT NULL;

主键永远不能为空,所以它总是 true。同样适用于

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

... WHERE TRUE;

这些被视为滥用密钥。因此它们是被禁止的。