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 05 MySQL
MySQL8.0.24版本Release Note的一些改进点
Apr 22 MySQL
MySQL 使用自定义变量进行查询优化
May 14 MySQL
MYSQL数据库使用UTF-8中文编码乱码的解决办法
May 26 MySQL
MySQL 数据类型选择原则
May 27 MySQL
Mysql systemctl start mysqld报错的问题解决
Jun 03 MySQL
MySQL的全局锁和表级锁的具体使用
Aug 23 MySQL
MySQL多表查询机制
Mar 17 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
Mysql 8.x 创建用户以及授予权限的操作记录
Apr 18 MySQL
mysql 乱码 字符集latin1转UTF8
Apr 19 MySQL
MySQL数据库Innodb 引擎实现mvcc锁
May 06 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
一个简洁的多级别论坛
2006/10/09 PHP
php mysql like 实现多关键词搜索的方法
2016/10/29 PHP
Array.prototype.slice 使用扩展
2010/06/09 Javascript
JQuery Study Notes 学习笔记(一)
2010/08/04 Javascript
javascript 防止刷新,后退,关闭
2010/08/07 Javascript
jQuery-Easyui 1.2 实现多层菜单效果的代码
2012/01/13 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
JavaScript打印iframe内容示例代码
2013/08/20 Javascript
JQuery的ready函数与JS的onload的区别详解
2013/11/21 Javascript
jQuery实现“扫码阅读”功能
2015/01/21 Javascript
基于jquery实现页面滚动到底自动加载数据的功能
2015/12/19 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
2016/04/28 Javascript
EasyUI学习之Combobox下拉列表(1)
2016/12/29 Javascript
详解vue嵌套路由-query传递参数
2017/05/23 Javascript
详解用vue.js和laravel实现微信授权登陆
2017/06/23 Javascript
JS验证输入的是否是数字及保留几位小数问题
2018/05/09 Javascript
express启用https使用小记
2019/05/21 Javascript
vue v-for直接循环数字实例
2019/11/07 Javascript
jQuery实现中奖播报功能(让文本滚动起来) 简单设置数值即可
2020/03/20 jQuery
微信小程序仿通讯录功能
2020/04/09 Javascript
vue实践---vue不依赖外部资源实现简单多语操作
2020/09/21 Javascript
Python 字典dict使用介绍
2014/11/30 Python
Python操作redis实例小结【String、Hash、List、Set等】
2019/05/16 Python
django admin 自定义替换change页面模板的方法
2019/08/23 Python
python使用gdal对shp读取,新建和更新的实例
2020/03/10 Python
django执行数据库查询之后实现返回的结果集转json
2020/03/31 Python
Python实现自动打开电脑应用的示例代码
2020/04/17 Python
Django 解决由save方法引发的错误
2020/05/21 Python
Python的历史与优缺点整理
2020/05/26 Python
HTML5的结构和语义(5):交互
2008/10/17 HTML / CSS
工商学院毕业生个人自我评价
2013/09/19 职场文书
语文教研活动总结
2014/07/02 职场文书
庆祝儿童节标语
2014/10/09 职场文书
污水处理保证书
2015/05/09 职场文书
离开雷锋的日子观后感
2015/06/09 职场文书
nginx+lua单机上万并发的实现
2021/05/31 Servers