mysql利用参数sql_safe_updates限制update/delete范围详解

 更新时间:2017年10月13日 10:39:27   作者:gxcherie  
这篇文章主要给大家介绍了关于mysql如何利用参数sql_safe_updates限制update/delete范围的相关资料文中介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。

前言

大家应该都知道,我们在mysql运维中出现过不少因为update/delete条件错误导致数据被误更新或者删除的case,为避免类似问题的发生,可以用sql_safe_updates参数来对update/delete做限制。这个参数设置为on后,可防止因程序bug或者DBA手工误操作导致的整个表被更新或者删除的情况。下面话不多说了,来一起看看详细的介绍吧。

设置这个参数时需要注意一下几点:

       a、设置前需要确认程序中所有的update和delete都符合sql_safe_updates的限制规范,不然程序会报错。

       b、5.0,5.1都是session级别的,5.6是global&session级别;低版本的数据库只能在程序创建session时设置带上set sql_safe_updates=on;高版本的数据库可以直接set global set sql_safe_updates=on,设置完成后让程序重连后生效。

限制规范:

示例表结构:

CREATE TABLE `delay_monitor` (
 `id` int(11) NOT NULL,
 `Ftime` datetime DEFAULT NULL,
 `Fgtid` varchar(128) NOT NULL DEFAULT '',
 PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin​

1、update

a、报错条件:不带where、带where无索引、where条件为常量

     不带where:update delay_monitor set Ftime=now();

      带where无索引:update delay_monitor set Ftime=now() where Fgtid='test';

      where条件为常量:update delay_monitor set Ftime=now() where 1;

 b、执行条件:带where带索引、不带where+带limit、带where无索引+limit、带where有索引+limit、where条件为常量+limit

       带where带索引:update delay_monitor set Ftime=now() where id=2;

       不带where+带limit: update delay_monitor set Ftime=now()  limit 1;

       带where无索引+limit:update delay_monitor set Ftime=now() where Fgtid='test' limit 1;

       带where有索引+limit:update delay_monitor set Ftime=now() where id =2 limit1;

        where条件为常量+limit:update delay_monitor set Ftime=now() where 1 limit 1;

 2、delete

 相对于update,delelte的限制会更为严格;where条件为常量或者为空,将不予执行。

a、报错条件:不带where、带where无索引、不带where+带limit、where条件为常量、where条件为常量+limit

      不带where:delete delay_monitor set Ftime=now();

      带where无索引:delete delay_monitor set Ftime=now() where Fgtid='test';

      不带where+带limit: delete delay_monitor set Ftime=now()  limit 1;

      where条件为常量:delete delay_monitor set Ftime=now() where 1;

      where条件为常量+limit:delete delay_monitor set Ftime=now() where 1 limit 1;

b、执行条件:带where带索引、带where无索引+limit、带where有索引+limt

      带where带索引:delete delay_monitor set Ftime=now() where id=2;

      带where无索引+limit:delete delay_monitor set Ftime=now() where Fgtid='test' limit 1;

      带where有索引+limit:delete delay_monitor set Ftime=now() where id =2 limit1;

总结如下表:key表示所有、const表示常量

操作  no where where key where nokey  limit where nokey+limit where key+limit      where const where const+limit
delete     NO YES NO NO YES YES NO     NO
update NO YES NO YES YES YES NO YES

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。

相关文章

  • mysql查看锁表及杀进程问题

    mysql查看锁表及杀进程问题

    这篇文章主要介绍了mysql查看锁表及杀进程问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • MySQL最佳实践之分区表基本类型

    MySQL最佳实践之分区表基本类型

    这篇文章主要给大家介绍了关于MySQL最佳实践之分区表基本类型的相关资料,文中通过示例代码介绍的非常详细,对大家学习或者使用MySQL具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
    2020-05-05
  • Mysql将查询结果集转换为JSON数据的实例代码

    Mysql将查询结果集转换为JSON数据的实例代码

    这篇文章主要介绍了Mysql将查询结果集转换为JSON数据的实例代码,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-03-03
  • mysql-5.7.28 在Linux下的安装教程图解

    mysql-5.7.28 在Linux下的安装教程图解

    这篇文章主要介绍了mysql-5.7.28 的Linux安装,本文通过图文并茂的形式给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下
    2019-10-10
  • mysql如果数据不存在,则插入新数据,否则更新的实现方法

    mysql如果数据不存在,则插入新数据,否则更新的实现方法

    mysql如果数据不存在,则插入新数据,否则更新的实现方法
    2011-11-11
  • mysql登录遇到ERROR 1045问题解决方法

    mysql登录遇到ERROR 1045问题解决方法

    mysql登录时出现了错误:ERROR 1045: Access denied for user,究竟是什么原因呢?接下来为你详细介绍下,感兴趣的你可以参考下哈,或许可以帮助到你
    2013-03-03
  • Mysql深入探索之Explain执行计划详析

    Mysql深入探索之Explain执行计划详析

    这篇文章主要给大家介绍了关于Mysql深入探索之Explain执行计划的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-08-08
  • mysql 数据插入优化方法之concurrent_insert

    mysql 数据插入优化方法之concurrent_insert

    在MyISAM里读写操作是串行的,但当对同一个表进行查询和插入操作时,为了降低锁竞争的频率,根据concurrent_insert的设置,MyISAM是可以并行处理查询和插入的
    2021-07-07
  • MySql中的longtext字段的返回问题及解决

    MySql中的longtext字段的返回问题及解决

    这篇文章主要介绍了MySql中的longtext字段的返回问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-07-07
  • sqoop export导出 map100% reduce0% 卡住的多种原因及解决

    sqoop export导出 map100% reduce0% 卡住的多种原因及解决

    这篇文章主要介绍了sqoop export导出 map100% reduce0% 卡住的多种原因及解决,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2021-01-01

最新评论