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 Router的安装部署
Apr 24 MySQL
Navicat for MySQL的使用教程详解
May 27 MySQL
MySQL系列之十一 日志记录
Jul 02 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL Shell import_table数据导入的实现
Aug 07 MySQL
Prometheus 监控MySQL使用grafana展示
Aug 30 MySQL
mysql分表之后如何平滑上线详解
Nov 01 MySQL
MySQL中int (10) 和 int (11) 的区别
Jan 22 MySQL
你真的会用Mysql的explain吗
Mar 31 MySQL
解决MySQL报“too many connections“错误
Apr 19 MySQL
mysql sql常用语句大全
Jun 21 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
php ZipArchive压缩函数详解实例
2013/11/06 PHP
PHP生成自适应大小的缩略图类及使用方法分享
2014/05/06 PHP
php curl上传、下载、https登陆实现代码
2017/07/23 PHP
PHP 模拟登陆功能实例详解
2019/09/10 PHP
ExtJS如何设置与获取radio控件的选取状态
2014/01/22 Javascript
js中各种类型的变量在if条件中是true还是false
2014/07/16 Javascript
jquery.mousewheel实现整屏翻屏效果
2015/08/30 Javascript
jquery插件uploadify实现带进度条的文件批量上传
2015/12/13 Javascript
js原型链与继承解析(初体验)
2016/05/09 Javascript
轮播的简单实现方法
2016/07/28 Javascript
javascript字符串对象常用api函数小结(连接,替换,分割,转换等)
2016/09/20 Javascript
简易的JS计算器实现代码
2016/10/18 Javascript
如何使用Vuex+Vue.js构建单页应用
2016/10/27 Javascript
jquery拼接ajax 的json和字符串拼接的方法
2017/03/11 Javascript
jQuery实现jQuery-form.js实现异步上传文件
2017/04/28 jQuery
bootstrap table使用入门基本用法
2017/05/24 Javascript
Node.js中 __dirname 的使用介绍
2017/06/19 Javascript
浅谈angular4实际项目搭建总结
2017/12/01 Javascript
Node.js使用MySQL连接池的方法实例
2018/02/11 Javascript
使用Vue实现简单计算器
2020/02/25 Javascript
原生小程序封装跑马灯效果
2020/10/21 Javascript
关于Js中new操作符的作用详解
2021/02/21 Javascript
Python常见数据结构详解
2014/07/24 Python
Python 数据结构之堆栈实例代码
2017/01/22 Python
Python 数据处理库 pandas进阶教程
2018/04/21 Python
使用django和vue进行数据交互的方法步骤
2019/11/11 Python
Jupyter Notebook安装及使用方法解析
2020/11/12 Python
瑞士香水购物网站:Parfumcity.ch
2017/01/14 全球购物
城市精细化管理实施方案
2014/03/04 职场文书
圆明园观后感
2015/06/03 职场文书
《水上飞机》教学反思
2016/02/20 职场文书
高效课堂教学反思
2016/02/24 职场文书
新员工入职感言范文!
2019/07/04 职场文书
研究生毕业登记表的自我鉴定范文
2019/07/15 职场文书
nginx如何将http访问的网站改成https访问
2021/03/31 Servers
给numpy.array增加维度的超简单方法
2021/06/02 Python