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 infobright的安装步骤
Apr 07 MySQL
MySQL创建索引需要了解的
Apr 08 MySQL
解决MySQL存储时间出现不一致的问题
Apr 28 MySQL
MySQL Threads_running飙升与慢查询的相关问题解决
May 08 MySQL
详解MySQL 联合查询优化机制
May 10 MySQL
使用ORM新增数据在Mysql中的操作步骤
Jul 26 MySQL
mysql主从复制的实现步骤
Oct 24 MySQL
mysql创建存储过程及函数详解
Dec 04 MySQL
MySQL Server层四个日志的实现
Mar 31 MySQL
MYSQL常用函数介绍
May 05 MySQL
mysql5.5中文乱码问题解决的有用方法
May 30 MySQL
mysql字段为NULL索引是否会失效实例详解
May 30 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
常用星际术语索引(新手指南)
2020/03/04 星际争霸
CentOS安装php v8js教程
2015/02/26 PHP
js 绑定键盘鼠标事件示例代码
2014/02/12 Javascript
推荐6款基于jQuery实现图片效果插件
2014/12/07 Javascript
jQuery模拟物体自由落体运动(附演示与demo源码下载)
2016/01/21 Javascript
AngularJS 使用 UI Router 实现表单向导
2016/01/29 Javascript
jQuery中值得注意的trigger方法浅析
2016/12/12 Javascript
Vue.js实现简单动态数据处理
2017/02/13 Javascript
移动端使用localResizeIMG4压缩图片
2017/04/22 Javascript
纯JS实现简单的日历
2017/06/26 Javascript
vue2.0 父组件给子组件传递数据的方法
2018/01/15 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
2018/06/12 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
Element-UI踩坑之Pagination组件的使用
2018/10/29 Javascript
vue实现下载文件流完整前后端代码
2020/11/17 Vue.js
js中延迟加载和预加载的具体使用
2021/01/14 Javascript
[03:24]CDEC.Y赛前采访 努力备战2016国际邀请赛中国区预选赛
2016/06/25 DOTA
Python使用logging结合decorator模式实现优化日志输出的方法
2016/04/16 Python
使用Python的Twisted框架构建非阻塞下载程序的实例教程
2016/05/25 Python
快速实现基于Python的微信聊天机器人示例代码
2017/03/03 Python
对Python进行数据分析_关于Package的安装问题
2017/05/22 Python
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
python3实现小球转动抽奖小游戏
2020/04/15 Python
解决python中导入win32com.client出错的问题
2019/07/26 Python
Python 用turtle实现用正方形画圆的例子
2019/11/21 Python
如何在pycharm中安装第三方包
2020/10/27 Python
John Hardy官方网站:手工设计首饰的奢侈品牌
2017/07/05 全球购物
业务员岗位职责
2013/11/16 职场文书
理货员的岗位职责
2013/11/23 职场文书
财会专业毕业生自荐信
2014/07/09 职场文书
人事局接收函
2015/01/31 职场文书
营业员岗位职责
2015/02/11 职场文书
社区文明创建工作总结2015
2015/04/21 职场文书
2019企业给员工的慰问信
2019/06/24 职场文书
JavaScript数组 几个常用方法总结
2021/11/11 Javascript
HTML页面中使两个div并排显示的实现
2022/05/15 HTML / CSS