mysq参数sql_safe_updates限制范围
在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 |
mysq参数sql_safe_updates限制范围的更多相关文章
- 在MySQL中阻止UPDATE语句没有添加WHERE条件的发生
如果在生产环境中使用UPDATE语句更新表数据,此时如果忘记携带本应该添加的WHERE条件,那么..Oh,no…后果可能不堪设想.那么有没有什么办法可以阻止这样的事情发生,又不使用任何的审核工具呢.. ...
- 闪回工具flashback
Ⅰ.背景 早先操作数据误操作后,我们一般通过全量备份+binlog的方式来实现恢复(前滚) 有时只想撤销一个几分钟前的操作,采用这种方式就会显得很笨重 大家都知道Oracle有个叫做flashback ...
- mysq优化参数详解:innodb_buffer_pool_size,innodb_file_per_table
Mysql配置参数: thread_pool:如果支持的话,使用线程池 innodb_buffer_pool_size:物理内存50%-70%最高80%独立实例,多实例:60% innodb_flus ...
- mysq建表参数设置
建表的完整性约束: not null 与 default unique primary auto_increment foreign key 外键的变种 三种关系 一.介绍 约束条件与数据类型的宽度 ...
- mysql sql_safe_updates 不支持子查询的更新。
考虑到开发人员有时候不小心误更新数据,要求线上库的 MySQL 实例都设置 sql_safe_updates=1 来避免没有索引的 update.delete. 结果有一天开发发现下面的一个SQL 没 ...
- MySQ binlog三种模式
MySQ binlog三种模式及设置方法 1.1 Row Level 行模式 日志中会记录每一行数据被修改的形式,然后在slave端再对相同的数据进行修改 优点:在row level模式下,bin- ...
- mysql 5.6 参数详解
系统变量提供的是各种与服务器配置和功能有关的信息.大部分的系统变量都可以在服务器启动时进行设置.在运行时,每一个系统变量都拥有一个全局值或会话值,或者同时拥有这两个值.许多系统变量都是动态的,也就是说 ...
- Mysql参数汇总
凡是需要耐心. 参数为静态参数则黄色字体标记. 参数为全局变量则粗体标记. 参数为全局.会话变量则不标记. auto_increment_increment auto_increment_offset ...
- MySQL系统变量sql_safe_updates总结
MySQL系统变量sql_safe_updates总结 在MySQL中,系统变量sql_safe_updates是个非常有意思的系统变量,在Oracle和SQL Server中都没有见过这样的参数 ...
随机推荐
- poj3723 MST好题 kruskal
#include<iostream> #include<cstring> #include<cstdio> #include<algorithm> us ...
- MPLS VPN随堂笔记1
MPLS VPN 基础 1.MPLS vpn架构的特点 1.1.允许不同CE传递相同私网路由 1.2.SP内部(所有P路由器)不需要学习CE路由 1.3.无安全保障但有带宽保障(跟SP租用服务) 2. ...
- 201521123081《Java程序设计》 第8周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结集合与泛型相关内容. 参考资料:XMIND 1.2 选做:收集你认为有用的代码片段 2. 书面作业 本次作业题集 集合 Q1. Li ...
- 201521123079《java程序设计》第7周学习总结
1. 本周学习总结 以你喜欢的方式(思维导图或其他)归纳总结集合相关内容. 2. 书面作业 1.ArrayList代码分析 1.1 解释ArrayList的contains源代码 public boo ...
- 201521123095 《Java程序设计》第2周学习总结
1. 本周学习总结 学会了使用码云管理代码,使用eclipse关联jdk源代码: 还学习了Java语言中各种数据类型以及运算符. 2. 书面作业 1.使用Eclipse关联jdk源代码,并查看Stri ...
- 控制结构(8) 线性化(linearization)
// 上一篇:管道(pipeline) // 下一篇:程序计数器(PC) "编程语言不过是一个工具,什么语言都一样","编程语言能改变人的思维,不同的语言会带给你不同的思 ...
- 201521123105 第10周Java学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 1.finally 题目4-21.1 截图你的提交结果(出现 ...
- Core Java 简单谈谈HashSet
同学们在看这个问题的时候,我先提出者两个问题,然后大家带着问题看这个文章会理解的更好. HashSet为什么添加元素时不能添加重复元素? HashSet是否添加null元素? 打开源码, 我们看到如下 ...
- java web SSO单点登录
第一篇: Web应用系统的演化总是从简单到复杂,从单功能到多功能模块再到多子系统方向发展. .当前的大中型Web互联网应用基本都是多系统组成的应用群,由多个web系统协同为用户提供服务. 多系统应用群 ...
- jvm系列:Java GC 分析
Java GC就是JVM记录仪,书画了JVM各个分区的表演. 什么是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之 ...