当前位置:首页 > 日记 > 正文

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

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

总结

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

相关文章

Excel语言基础中VBA标识符有什么作

Excel语言基础中VBA标识符有什么作

语言基础,标识符,作用,有什么,用途,  VBA标识符是一种标识变量、常量、过程、函数、类等语言构成单位的符号,利用它可以完成对变量、常量、过程、函数、类等的引用。以下是小编为您带来的关于Excel语言基础中VBA标识符,希望对您有所帮助。E…

ps可选颜色调色及原理是什么

ps可选颜色调色及原理是什么

可选,原理,颜色,电脑软件,ps,   "可选颜色"是Adobe Photoshop中的一条关于色彩调整的命令。但与色阶,色彩平衡和色相饱和度相比,就没有那么直观,所以大家常常遇到可选颜色时,并不是那么顺手,我也在网络上查了查关于可选颜色的教…

photoshop怎么粘贴照片

photoshop怎么粘贴照片

照片,电脑软件,photoshop,   当我们在使用pd的时候,可以将一张或多张照片粘贴至另一张照片上,也可以将一张或多张照片粘贴至新建的画布上。下面跟小编来了解一下怎么做吧!photoshop粘贴照片的方法一、将一张照片粘贴至另一张照片…

对MySQLCURDATE实例详解()函数

对MySQLCURDATE实例详解()函数

函数,详解,实例,电脑软件,MySQLCURDATE,MySQL CURDATE函数介绍 如果字符串的上下文或yyymmdd格式用于在数字背景下,了CURDATE()函数将返回的值为格式的当前日期。 下面的示例演示如何使用CURDATE()在一个字符串中的功能。 SQL >选择CURDATE(); --…

PS人物照片怎么进行面部精修?

PS人物照片怎么进行面部精修?

照片,面部,人物,电脑软件,PS,一个人像的照片拍出来以后难免有不完美的地方,我们就可以通过PS这样的一个工具来精修一下,从而让照片更加完美的呈现出来。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、…

ps怎么设计浓厚艺术色彩的桌面背景

ps怎么设计浓厚艺术色彩的桌面背景

浓厚,色彩,艺术,桌面背景,电脑软件,制作艺术桌面背景效果主要利用ps的滤镜功能,现在就把制作的过程和截图分享给大家,效果如下图所示,希望对你有所帮助和启发。软件名称:Adobe photoshop 7.01 官方正式简体中文版软件大小:154MB更新时间:2013-04-…

PHP实现向关联数组指定的Key之前插

PHP实现向关联数组指定的Key之前插

元素,方法,数组,电脑软件,PHP,本文实例讲述了PHP实现向关联数组指定的Key之前插入元素的方法。分享给大家供大家参考,具体如下:PHP 关联数组可以通过三种方式插入新元素:1. $array[$insert_key] = $insert_value;2. $array = array_merge($arr…

笔记本win10截图快捷键

笔记本win10截图快捷键

快捷键,截图,电脑软件,每个人都会有需要截图的时候,那么在使用win10系统的你知道如何快速便捷的去截图吗?不需要运用QQ也可以轻松方便的截图哦。台式电脑键盘的快捷键1、这是最简单的,【PrintScreen】键即可,整个屏幕的图像会被复制到剪贴板。…

PS滤镜制作创意十足的火焰花朵教程

PS滤镜制作创意十足的火焰花朵教程

教程,滤镜,创意,火焰,电脑软件,   教程的效果图是由火焰字变形得到的。制作的时候先用滤镜等做出火焰字效果。然后把做好的火焰字抠出来,再用滤镜变形处理做成花瓣。最后把花瓣组成花朵即可。下面跟小编来了解一下吧!PS滤镜制作…

jQuery实现别踩白块儿网页版小游戏

jQuery实现别踩白块儿网页版小游戏

小游戏,网页,块儿,电脑软件,jQuery,大致介绍终于结束了考试,放假回家了。这次的别踩白块儿网页版要比之前做的 jQuery编写网页版2048小游戏 要简单一点,基本的思路都差不多。这篇博客并不是详细的讲解,只是大致介绍函数的作用,其中实现的细节注…

PHP对象的浅复制与深复制的实例详

PHP对象的浅复制与深复制的实例详

浅复制,对象,深复制,详解,实例,PHP对象的浅复制与深复制的实例详解最近在看原型模式时注意到这个问题~~PHP中对象 '=' 与‘clone'的区别实例代码://聚合类 class ObjA { public $num = 0; public $objB;//包含的对象 function __co…

Apache下禁止php文件被直接访问的

Apache下禁止php文件被直接访问的

直接访问,方法,文件,电脑软件,Apache,一开始,我想在重写规则里直接禁止php后缀的URL被访问。但后来发现重写规则是递归调用的,如果在重写规则里直接禁止php,那么重写到php文件的规则也会失效。RewriteEngineOnRewriteRule^test$/test.php[L]Re…