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子句中列可以不是索引列)

  • 相关阅读:
    eclipse中打断点debug无效
    Jenkins构建部署Maven项目
    自动生成实体类和xml
    session 控制单点登录
    eclipse team 没有svn
    easyui combobox 设置滚动条
    unkow jdbc driver : http://maven.apache.org
    easyui datagrid列显示图片
    mysql中计算日期整数差
    Map<String, Object>转Object,Object转 Map<String, Object>
  • 原文地址:https://www.cnblogs.com/FengGeBlog/p/10287038.html
Copyright © 2011-2022 走看看