mysql sql_safe_updates 分析
排名前5的SQL悲剧中肯定有:
mysql> set sql_safe_updates=1; Query OK, 0 rows affected (0.00 sec) mysql> delete from t; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column mysql> delete from t where 1=1; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
dispatch_command |->mysql_parse|->mysql_execute_command->mysql_update/mysql_delete
当where条件中column没有索引可用且无limit限制时会拒绝更新
/* If running in safe sql mode, don't allow updates without keys */if (table->quick_keys.is_clear_all()){thd->server_status|=SERVER_QUERY_NO_INDEX_USED;if (safe_update && !using_limit){my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));goto err;}}
mysql_delete中:(sql/sql_delete.cc)
当where条件为常量或者为空,或者where条件中column没有索引可用且无limit限制时拒绝删除
const_cond= (!conds || conds->const_item());safe_update=test(thd->variables.option_bits & OPTION_SAFE_UPDATES);if (safe_update && const_cond){my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));DBUG_RETURN(TRUE);}.../* If running in safe sql mode, don't allow updates without keys */if (table->quick_keys.is_clear_all()){thd->server_status|=SERVER_QUERY_NO_INDEX_USED;if (safe_update && !using_limit){delete select;free_underlaid_joins(thd, select_lex);my_message(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE,ER(ER_UPDATE_WITHOUT_KEY_IN_SAFE_MODE), MYF(0));DBUG_RETURN(TRUE);}}
PS: update在有limit时是可以执行更新的,而delete严格一些,只要where条件为常量或者为空是会被拒绝的,如:
mysql> update t set str='hello' where 1=1 limit 1; Query OK, 0 rows affected (0.00 sec) mysql> delete from t where 1=1 limit 1; ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
不知道这是基于怎样的考虑...
转载于:https://www.cnblogs.com/duanxz/p/3891540.html
mysql sql_safe_updates 分析相关推荐
- Mysql元数据分析
Mysql元数据分析 一.information_schema库 information_schema库中的表,保存的是Mysql的元数据. 官网元数据表介绍 InnoDB相关的表介绍 库中有表: + ...
- MYSQL:explain分析
mysql explain分析 通过explain可以知道mysql是如何处理语句,分析出查询或是表结构的性能瓶颈.通过expalin可以得到: 1. 表的读取顺序 2.表的读取操作的操作类型 3.哪 ...
- MySQL索引分析和优化(转)
MySQL索引分析和优化(转) 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第一个记录开始扫描整个表的所有记 录,直至找到符 ...
- mysql genlog 分析_Mysq性能分析 —— Genral log(普通日志)与 Slow log(慢速日式)...
对Mysql进行深入的分析对于发现mysql性能瓶颈和寻找优化策略是十分必要的. 我们可以从不同的粒度上对Mysql进行分析:可以整体分析服务器,或者检查单个查询或批查询. 通过分析,我们得到的如下信 ...
- MySQL性能分析及explain的使用
MySQL性能分析及explain用法的知识是本文我们主要要介绍的内容,接下来就让我们通过一些实际的例子来介绍这一过程,希望能够对您有所帮助. 1.使用explain语句去查看分析结果 如explai ...
- MySQL 索引分析除了 EXPLAIN 还有什么方法?
作者 | adrninistrat0r 责编 | 夕颜 出品 | CSDN(ID:CSDNnews) 前言 对于非数据库开发人员而言,难以对MySQL源码进行分析或调试,接近一个黑盒,但MySQL提供 ...
- (3.13)mysql基础深入——mysql日志分析工具之mysqlsla【待完善】
(3.13)mysql基础深入--mysql 日志分析工具之mysqlsla 关键字:Mysql日志分析工具.mysqlsla 常用工具 [1]mysqldumpslow:官方提供的慢查询日志分析工具 ...
- MySQL 性能分析 之 联合索引(复合索引)实践分析
MySQL 性能分析 之 联合索引(复合索引)实践分析 作为开发者,大家都知道,一个服务器.一个数据库的性能是项目的重中之重,后台架构.写法与数据库设计的好坏往往直接影响到整个项目的性能. 索引:是当 ...
- php mysql索引原理_加速PHP动态网站 关于MySQL索引分析优化
本文主要讲述了如何加速动态网站的MySQL索引分析和优化. 一.什么是索引? 索引用来快速地寻找那些具有特定值的记录,所有MySQL索引都以B-树的形式保存.如果没有索引,执行查询时MySQL必须从第 ...
最新文章
- 通用权限管理系统组件中简易员工档案管理模块参考
- 快速融入新团队的一点个人体会
- 驱动备份工具哪个好_大庆seo排名优化推广公司工具哪个好
- ddrelease64 黑苹果_High Sierra 黑苹果构建 微星X99A GAMING PRO CARBON+i7 6800k+GTX1070
- 虚拟DOM - React的骨干
- linux下的文档处理及tar命令
- [2010-9-8]
- 动态路由之RIP协议、Bellman-Ford算法
- 【洛谷P4219】【BJOI2014】—大融合(线段树合并)
- 山东大学舆情分析系统项目结题总结
- 卸载驱动、安装CUDA及CUDNN
- INT 10H 中断简介
- 科学计算IED--Anaconda软件基础操作
- FTPC 在制品跟踪(WIP Tracking)对象
- 2021年中国医药工业经济运行现状及行业发展建议:主营业务收入、利润总额整体递增,建议加大监管,引导产业良性发展[图]
- 单片机C语言学习(菜鸟入门)
- 关于SDRAM存储器
- 自定义组件-behaviors
- NIST宣布推出前4种抗量子加密算法
- 同步电机与异步电机的区别
热门文章
- docker内外连通ros_docker容器内的ros外设使用与远程配置
- java求职_Java 求职怎么积累知识才可以找到工作
- 各种树:trie树、B树、B-树、B+树、B*树
- 思想开放-学数学之人必备的特质(转载)
- 2019年东莞特长生 散步
- 2048(lj模拟)
- 洛谷 P2935 [USACO09JAN]最好的地方Best Spot
- 点击事件为什么会失效_耐高温润滑油脂为什么会失效?
- sketchup 图片转模型_你应该知道的那些 Sketchup 实用快捷键和使用技巧!
- 大学有哪些专业python_python就业方向有哪些?