mysql如何能有效防止删库跑路


Posted in MySQL onOctober 05, 2021

大家肯定听说过,有些开发者由于个人失误,在delete或者update语句的时候没有添加where语句,导致整个表数据错乱。

mysql安全模式:mysql发现delete、update语句没有添加where或者limit条件时会报错。整个sql将无法执行,有效防止了误删表的情况。

安全模式设置

在mysql中通过如下命令查看状态:

show variables like 'sql_safe_updates';

mysql如何能有效防止删库跑路

默认是OFF状态,将状态设置为ON即可:

  • set sql_safe_updates=1; //打开
  • set sql_safe_updates=0; //关闭

设置为ON之后

  • update语句:where条件中列(column)没有索引可用且无limit限制时会拒绝更新。where条件为常量且无limit限制时会拒绝更新。
  • delete语句: ①where条件为常量,②或where条件为空,③或where条件中 列(column)没有索引可用且无limit限制时拒绝删除。

测试

打开安全模式进行测试

1.无where的update和delete

delete from t_user

delete from t_user
> 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
> 时间: 0.001s

update t_user set name='123'

update t_user set name='123'
> 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
> 时间: 0.001s

2、非索引键的delete

delete from t_user where name='123'

delete from  t_user where name='123'
> 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column
> 时间: 0.007s

如果delete的where条件不是索引键,则必须要添加limit才可以。

delete from t_user where name='123' limit 1

delete from  t_user where name='123' limit 1
> Affected rows: 0
> 时间: 0.002s

3.索引键的delete

delete from t_user where group_id='123'

delete from  t_user where group_id='123'
> Affected rows: 0
> 时间: 0s

总结

如果设置了sql_safe_updates=1,那么update语句必须满足如下条件之一才能执行成功

  • 使用where子句,并且where子句中列必须为prefix索引列
  • 使用limit
  • 同时使用where子句和limit(此时where子句中列可以不是索引列)

delete语句必须满足如下条件之一才能执行成功

  • 使用where子句,并且where子句中列必须为prefix索引列
  • 同时使用where子句和limit(此时where子句中列可以不是索引列)一才能执行成功。

到此这篇关于mysql如何能有效防止删库跑路的文章就介绍到这了,更多相关mysql 防止删库内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

MySQL 相关文章推荐
MySQL 覆盖索引的优点
May 19 MySQL
MySQL完整性约束的定义与实例教程
May 30 MySQL
浅谈MySQL之浅入深出页原理
Jun 23 MySQL
解决mysql问题:由于找不到MSVCR120.dll,无法继续执行代码
Jun 26 MySQL
详解MySQL的主键查询为什么这么快
Apr 03 MySQL
排查MySQL生产环境索引没有效果
Apr 11 MySQL
MySQL创建管理LIST分区
Apr 13 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 MySQL
MySQL GTID复制的具体使用
May 20 MySQL
MySQL导致索引失效的几种情况
Jun 25 MySQL
Mysql如何查看是否使用到索引
Dec 24 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
深入掌握include_once与require_once的区别
2013/06/17 PHP
destoon实现调用当前栏目分类及子分类和三级分类的方法
2014/08/21 PHP
PHP递归遍历指定目录的文件并统计文件数量的方法
2015/03/24 PHP
Yii列表定义与使用分页方法小结(3种方法)
2016/07/15 PHP
yii2项目实战之restful api授权验证详解
2017/05/20 PHP
javascript下过滤数组重复值的代码
2007/09/10 Javascript
JavaScript基础篇之变量作用域、传值、传址的简单介绍与实例
2013/06/29 Javascript
JS三目运算(三元运算)方法详解
2017/03/01 Javascript
关于Vue.nextTick()的正确使用方法浅析
2017/08/25 Javascript
详解vue2 $watch要注意的问题
2017/09/08 Javascript
微信小程序 动画的简单实例
2017/10/12 Javascript
总结js函数相关知识点
2018/02/27 Javascript
解决vue select当前value没有更新到vue对象属性的问题
2018/08/30 Javascript
JS实现点击拉拽轮播图pc端移动端适配
2018/09/05 Javascript
详解从vue-loader源码分析CSS Scoped的实现
2019/09/23 Javascript
jQuery 淡入/淡出效果函数用法分析
2020/05/19 jQuery
vue 使用post/get 下载导出文件操作
2020/08/07 Javascript
vue实现简单计算商品价格
2020/09/14 Javascript
echarts实现晶体球面投影的实例教程
2020/10/10 Javascript
PYTHON正则表达式 re模块使用说明
2011/05/19 Python
python中使用 xlwt 操作excel的常见方法与问题
2019/01/13 Python
HTML5+CSS3实现无插件拖拽上传图片(支持预览与批量)
2017/01/05 HTML / CSS
网络艺术零售业的先驱者:artrepublic
2017/09/26 全球购物
荟萃全球保健品:维他购
2018/05/09 全球购物
某公司部分笔试题
2013/11/05 面试题
体育教育专业毕业生自荐信
2013/11/15 职场文书
中学生班主任评语
2014/01/30 职场文书
员工生日活动方案
2014/08/24 职场文书
运动会广播稿150字(9篇)
2014/09/20 职场文书
2014年超市工作总结
2014/11/19 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
导游词之太行山青龙峡
2020/01/14 职场文书
Golang Gob编码(gob包的使用详解)
2021/05/07 Golang
python 爬取华为应用市场评论
2021/05/29 Python
Win11运行cmd提示“请求的操作需要提升”的两种解决方法
2022/07/07 数码科技