1

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

4

1 回答 1

1

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


... WHERE `id` IS NOT NULL;

主键永远不能为空,因此它始终为true。也一样

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

... WHERE TRUE;

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

于 2018-07-21T03:37:35.913 回答