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
防止您在 UPDATE
和 DELETE
语句中滥用键 。 MySQL 引擎已优化以理解给定的一些条件。
... WHERE `id` IS NOT NULL;
主键永远不能为空,所以它总是 true
。同样适用于
... WHERE `id`=`id`;
和
... WHERE TRUE;
这些被视为滥用密钥。因此它们是被禁止的。
我知道我可以在 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
防止您在 UPDATE
和 DELETE
语句中滥用键 。 MySQL 引擎已优化以理解给定的一些条件。
... WHERE `id` IS NOT NULL;
主键永远不能为空,所以它总是 true
。同样适用于
... WHERE `id`=`id`;
和
... WHERE TRUE;
这些被视为滥用密钥。因此它们是被禁止的。