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 自定义变量的概念及特点
May 13 MySQL
详解Mysql和Oracle之间的误区
May 18 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
Mysql中 unique列插入重复值该怎么解决呢
May 26 MySQL
MySQL 常见的数据表设计误区汇总
Jun 07 MySQL
mysql优化之query_cache_limit参数说明
Jul 01 MySQL
MySQL系列之十四 MySQL的高可用实现
Jul 02 MySQL
MySQL基于索引的压力测试的实现
Nov 07 MySQL
解决Mysql报错 Table 'mysql.user' doesn't exist
May 06 MySQL
MySQL count(*)统计总数问题汇总
Sep 23 MySQL
DQL数据查询语句使用示例
Dec 24 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
Smarty+QUICKFORM小小演示
2007/02/25 PHP
php curl 登录163邮箱并抓取邮箱好友列表的代码(经测试)
2011/04/07 PHP
php 无法加载mcrypt.dll的解决办法
2013/04/03 PHP
非html5实现js版弹球游戏示例代码
2013/09/22 Javascript
js通过location.search来获取页面传来的参数
2014/09/11 Javascript
jQuery插件PageSlide实现左右侧栏导航菜单
2015/04/12 Javascript
jQuery 获取屏幕高度、宽度的简单实现案例
2016/05/17 Javascript
使用three.js 画渐变的直线
2016/06/05 Javascript
JSON字符串和对象相互转换实例分析
2016/06/16 Javascript
BootStrap实现带有增删改查功能的表格(DEMO详解)
2016/10/26 Javascript
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
Vue 过滤器filters及基本用法
2017/12/26 Javascript
js构造函数创建对象是否加new问题
2018/01/22 Javascript
Vue中render方法的使用详解
2018/01/26 Javascript
详解vue使用vue-layer-mobile组件实现toast,loading效果
2018/08/31 Javascript
基于vue中keep-alive缓存问题的解决方法
2018/09/21 Javascript
jQuery实现侧边栏隐藏与显示的方法详解
2018/12/22 jQuery
8个有意思的JavaScript面试题
2019/07/30 Javascript
浅谈vuex为什么不建议在action中修改state
2020/02/02 Javascript
理解JavaScript中的Proxy 与 Reflection API
2020/09/21 Javascript
原生js实现下拉框选择组件
2021/01/20 Javascript
[08:40]Navi Vs Newbee
2018/06/07 DOTA
github配置使用指南
2014/11/18 Python
Python素数检测的方法
2015/05/11 Python
21行Python代码实现拼写检查器
2016/01/25 Python
深入浅析python 中的匿名函数
2018/05/21 Python
django 发送邮件和缓存的实现代码
2018/07/18 Python
春节到了 教你使用python来抢票回家
2020/01/06 Python
深入浅析pycharm中 Make available to all projects的含义
2020/09/15 Python
Linux面试题LINUX系统类
2015/11/25 面试题
采购主管的岗位职责
2013/12/17 职场文书
大学本科毕业生求职信范文
2013/12/18 职场文书
体育专业学生自我评价范文
2014/01/17 职场文书
先进班级集体事迹材料
2014/01/30 职场文书
2014年会计个人工作总结
2014/11/24 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书