• MYSQL安全模式"sql_safe_updates"设置update和delete不带where的操作限制


    前言

      在数据库操作中,如果在update和delete没有加上where条件,数据将会全部修改。

      不只是初识mysql的开发者会遇到这个问题,工作有一定经验的开发者有时难免也会忘记写入where条件。

      今天,一个同事就发生了这种情况,手抖清空了线上一个table的所有数据(ps:这是要准备删库跑路的节奏???)。

      在恢复完数据后,为了以后避免失误造成的数据全部修改或删除,设置开启mysql的安全模式。

    解决方案

      首先查看安全模式是否开启(OFF关闭,ON打开)

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

      打开/关闭(global全局生效 ):

      set global sql_safe_updates=1;

      set global sql_safe_updates=0;

      安全模式设置成功后如果再次执行全表update/delete,会报错

    DELETE from m_test
    error : You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column. 

    总结

      如果开启了安全模式后

      update语句必须满足如下条件之一才能执行成功

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

      delete语句必须满足如下条件之一才能执行成功

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

  • 相关阅读:
    浪潮之巅阅读笔记
    人月神话阅读笔记3
    学习报告
    人月神话阅读笔记2
    学习报告
    第十一周学习总结
    软件杯项目——手写体识别
    第十周学习进度
    第九周学习进度
    《软件架构师的12项修炼》阅读笔记
  • 原文地址:https://www.cnblogs.com/xhq1024/p/12034788.html
Copyright © 2020-2023  润新知