代码之家  ›  专栏  ›  技术社区  ›  Manngo

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

  •  1
  • Manngo  · 技术社区  · 6 年前

    我知道我可以关闭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 回复  |  直到 6 年前
        1
  •  1
  •   Roshana Pitigala Laxmansinghsodhanohdiyala    6 年前

    MySQL SQL_SAFE_UPDATES 防止误用钥匙 在里面 UPDATE DELETE 声明。对MySQL引擎进行了优化,以了解给定的一些条件。


    ... WHERE `id` IS NOT NULL;
    

    主键不能为空,因此 true . 同样的道理

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

    ... WHERE TRUE;
    

    这被认为是钥匙的误用。母鸡是被禁止的。