zoukankan      html  css  js  c++  java
  • MySQL安全模式:sql_safe_updates讲解

    什么是安全模式

    在mysql中,如果在update和delete没有加上where条件,数据将会全部修改。不只是初识mysql的开发者会遇到这个问题,工作有一定经验的工程师难免也会忘记写入where条件。为了避免失误造成的数据全部修改和删除,可开启mysql的安全模式。

    安全模式的开启:

    mysql> show variables like 'sql_safe_updates';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | sql_safe_updates | ON    |
    +------------------+-------+
    1 row in set (0.00 sec)

    安全模式的一般报这样的错误:

    mysql> update users set status=1;
    ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column

     关闭安全模式:

    mysql> set sql_safe_updates=1;
    Query OK, 0 rows affected (0.00 sec)
    
    mysql> show variables like 'sql_safe_updates';
    +------------------+-------+
    | Variable_name    | Value |
    +------------------+-------+
    | sql_safe_updates | ON    |
    +------------------+-------+
    1 row in set (0.00 sec)

    注意,如果生产环境中有必要设置安全模式,一下几点要明白:

    如果设置了sql_safe_updates=1,那么update语句必须满足如下条件之一才能执行成功

    1)使用where子句,并且where子句中列必须为prefix索引列
    2)使用limit
    3)同时使用where子句和limit(此时where子句中列可以不是索引列)

    delete语句必须满足如下条件之一才能执行成功
    1)使用where子句,并且where子句中列必须为prefix索引列
    2)同时使用where子句和limit(此时where子句中列可以不是索引列)

  • 相关阅读:
    如何检测死锁并快速定位死锁位置
    几种线程本地存储变量和普通变量的性能比较
    multi_index_container性能测试
    [高并发引擎]定时器模块
    [高并发引擎]Log模块
    静态博客教程 1:hexo + github
    蛇形填数
    实现简单的 ls 命令
    静态库与动态库的创建和使用
    用两个栈实现队列
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10287038.html
Copyright © 2011-2022 走看看