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 相关文章推荐
数据库连接池
Apr 06 MySQL
MySQL 角色(role)功能介绍
Apr 24 MySQL
mysql中between的边界,范围说明
Jun 08 MySQL
mysql脏页是什么
Jul 26 MySQL
MySQL如何解决幻读问题
Aug 07 MySQL
MySQL窗口函数的具体使用
Nov 17 MySQL
MySQL RC事务隔离的实现
Mar 31 MySQL
详细介绍MySQL中limit和offset的用法
May 06 MySQL
MySQL慢查询中的commit慢和binlog中慢事务的区别
Jun 16 MySQL
mysql sql常用语句大全
Jun 21 MySQL
MySQL 原理与优化之原数据锁的应用
Aug 14 MySQL
postgresql如何找到表中重复数据的行并删除
May 08 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
PHP 上传文件的方法(类)
2009/07/30 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
PHP正确解析UTF-8字符串技巧应用
2012/11/07 PHP
php实现可以设置中奖概率的抽奖程序代码分享
2014/01/19 PHP
php自动更新版权信息显示的方法
2015/06/19 PHP
在PHP站点的页面上添加Facebook评论插件的实例教程
2016/01/08 PHP
让人期待的2011年度最佳 jQuery 插件分享
2012/03/16 Javascript
Javascript控制页面链接在新窗口打开具体方法
2013/08/16 Javascript
Extjs 4.x 得到form CheckBox 复选框的值
2014/05/04 Javascript
在JavaScript应用中使用RequireJS来实现延迟加载
2015/07/01 Javascript
JavaScript动态数量的文件上传控件
2016/11/18 Javascript
微信小程序template模板实例详解
2017/10/27 Javascript
用node-webkit把web应用打包成桌面应用(windows环境)
2018/02/01 Javascript
vue axios 给生产环境和发布环境配置不同的接口地址(推荐)
2018/05/08 Javascript
Nodejs让异步变成同步的方法
2019/03/02 NodeJs
利用JS响应式修改vue实现页面的input值
2019/09/02 Javascript
Python搜索引擎实现原理和方法
2017/11/27 Python
python安装教程
2018/02/28 Python
flask-restful使用总结
2018/12/04 Python
Puppeteer使用示例详解
2019/06/20 Python
Python常用数据类型之间的转换总结
2019/09/06 Python
Python延迟绑定问题原理及解决方案
2020/08/04 Python
Python 中的函数装饰器和闭包详解
2021/02/06 Python
使用HTML5中的contentEditable来将多行文本自动增高
2016/03/01 HTML / CSS
全世界最美丽的四星和五星级酒店预订:Prestigia.com
2017/11/15 全球购物
Lookfantastic日本官网:英国知名护肤、化妆品和头发护理购物网站
2018/04/21 全球购物
库房主管岗位职责
2013/12/31 职场文书
网络教育自我鉴定
2014/02/04 职场文书
学校献爱心活动总结
2014/07/08 职场文书
民主评议党员自我鉴定
2014/10/21 职场文书
护理实习生带教计划
2015/01/16 职场文书
体育教师个人工作总结
2015/02/09 职场文书
实习单位意见
2015/06/04 职场文书
python 下划线的多种应用场景总结
2021/05/12 Python
Nginx使用Lua模块实现WAF的原理解析
2021/09/04 Servers
Python实现文字pdf转换图片pdf效果
2022/04/03 Python