zoukankan      html  css  js  c++  java
  • 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子句中列可以不是索引列)

  • 相关阅读:
    Convolutional Neural Network-week1编程题(一步步搭建CNN模型)
    Coursera Deep Learning笔记 卷积神经网络基础
    爬取b站周杰伦新歌mv弹幕 绘制词云
    Coursera Deep Learning笔记 结构化机器学习项目 (下)
    Golang-执行go get私有库提示”410 Gone“ 解决办法
    golang常用的http请求操作
    关于asyncio知识(四)
    关于asyncio知识(二)
    Python Every Class Needs a __repr__
    关于asyncio知识(一)
  • 原文地址:https://www.cnblogs.com/xhq1024/p/12034788.html
Copyright © 2011-2022 走看看