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 如何批量插入数据
Apr 06 MySQL
MySQL主从复制断开的常用修复方法
Apr 07 MySQL
MySQL 使用SQL语句修改表名的实现
Apr 07 MySQL
分析MySQL抛出异常的几种常见解决方式
May 18 MySQL
MySQL索引失效的典型案例
Jun 05 MySQL
SQL实现LeetCode(197.上升温度)
Aug 07 MySQL
mysql配置SSL证书登录的实现
Sep 04 MySQL
Pycharm远程调试和MySQL数据库授权问题
Mar 18 MySQL
MySQL学习必备条件查询数据
Mar 25 MySQL
MySQL数据库如何查看表占用空间大小
Jun 10 MySQL
mysql查看表结构的三种方法总结
Jul 07 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
在PHP中实现Javascript的escape()函数代码
2010/08/08 PHP
php中模拟POST传递数据的两种方法分享
2011/09/16 PHP
PHP表单递交控件名称含有点号(.)会被转化为下划线(_)的处理方法
2013/01/06 PHP
PHP判断数据库中的记录是否存在的方法
2014/11/14 PHP
微信支付开发告警通知实例
2016/07/12 PHP
Yii2语言国际化自动配置详解
2018/08/22 PHP
JS类库Bindows1.3中的内存释放方式分析
2007/03/08 Javascript
javascript 广告后加载,加载完页面再加载广告
2010/11/25 Javascript
Extjs实现进度条的两种便捷方式
2013/09/26 Javascript
$.each遍历对象、数组的属性值并进行处理
2014/07/18 Javascript
JavaScript function 的 length 属性使用介绍
2014/09/15 Javascript
JS实现仿FLASH效果的竖排导航代码
2015/09/15 Javascript
理解javascript模块化
2016/03/28 Javascript
js+html5实现canvas绘制椭圆形图案的方法
2016/05/21 Javascript
PhotoSwipe异步动态加载图片方法
2016/08/25 Javascript
jQuery实现6位数字密码输入框
2016/12/29 Javascript
bootstrap table单元格新增行并编辑
2017/05/19 Javascript
VeeValidate在vue项目里表单校验应用案例
2018/05/09 Javascript
vue router 通过路由来实现切换头部标题功能
2019/04/24 Javascript
浅谈vue异步数据影响页面渲染
2019/10/29 Javascript
vue 使用插槽分发内容操作示例【单个插槽、具名插槽、作用域插槽】
2020/03/06 Javascript
vue+canvas实现移动端手写签名
2020/05/21 Javascript
Openlayers显示地理位置坐标的方法
2020/09/28 Javascript
详解Python中的strftime()方法的使用
2015/05/22 Python
10个Python小技巧你值得拥有
2018/09/29 Python
win8.1安装Python 2.7版环境图文详解
2019/07/01 Python
Python PIL读取的图像发生自动旋转的实现方法
2019/07/05 Python
Python 二叉树的层序建立与三种遍历实现详解
2019/07/29 Python
Python3打包exe代码2种方法实例解析
2020/02/17 Python
解决PyCharm不在run输出运行结果而不是再Console里输出的问题
2020/09/21 Python
canvas探照灯效果的示例代码
2018/11/30 HTML / CSS
给定一个时间点,希望得到其他时间点
2013/11/07 面试题
早读课迟到检讨书
2014/09/25 职场文书
模范班主任事迹材料
2014/12/17 职场文书
秦兵马俑导游词
2015/02/02 职场文书
2015年幼儿园班务工作总结
2015/05/12 职场文书