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 分组查询的优化方法
May 12 MySQL
MySQL子查询中order by不生效问题的解决方法
Aug 02 MySQL
SQL实现LeetCode(196.删除重复邮箱)
Aug 07 MySQL
详细聊聊关于Mysql联合查询的那些事儿
Oct 24 MySQL
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
Mar 22 MySQL
MySQL磁盘碎片整理实例演示
Apr 03 MySQL
MySQL视图概念以及相关应用
Apr 19 MySQL
mysql使用FIND_IN_SET和group_concat两个方法查询上下级机构
Apr 20 MySQL
MySQL的存储过程和相关函数
Apr 26 MySQL
详解Mysql事务并发(脏读、不可重复读、幻读)
Apr 29 MySQL
MySQL中EXPLAIN语句及用法
May 20 MySQL
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
Aug 14 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
PHP调用三种数据库的方法(2)
2006/10/09 PHP
php 运行效率总结(提示程序速度)
2009/11/26 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
2014/07/29 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
2020/04/06 PHP
js Event对象的5种坐标
2011/09/12 Javascript
js DOM 元素ID就是全局变量
2012/09/20 Javascript
js实现省市联动效果的简单实例
2014/02/10 Javascript
JQuery入门基础小实例(1)
2015/09/17 Javascript
有关Promises异步问题详解
2015/11/13 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
Angular和百度地图的结合实例代码
2016/10/19 Javascript
Bootstrap的modal拖动效果
2016/12/25 Javascript
解决ajax不能访问本地文件问题(利用js跨域原理)
2017/01/24 Javascript
基于javascript实现最简单选项卡切换
2017/02/01 Javascript
高性能的javascript之加载顺序与执行原理篇
2018/01/14 Javascript
Angular 如何使用第三方库的方法
2018/04/18 Javascript
uni-app使用微信小程序云函数的步骤示例
2020/05/22 Javascript
[52:02]DOTA2-DPC中国联赛 正赛 Phoenix vs Dragon BO3 第二场 2月26日
2021/03/11 DOTA
Python随机数random模块使用指南
2016/09/09 Python
Python中关键字nonlocal和global的声明与解析
2017/03/12 Python
Django中的forms组件实例详解
2018/11/08 Python
浅析Python语言自带的数据结构有哪些
2019/08/27 Python
Python Scrapy多页数据爬取实现过程解析
2020/06/12 Python
html5基础教程常用技巧整理
2013/08/20 HTML / CSS
Hotels.com爱尔兰:全球酒店预订
2017/02/24 全球购物
学校招生宣传广告词
2014/03/19 职场文书
党员一句话承诺大全
2014/03/28 职场文书
《故都的秋》教学反思
2014/04/15 职场文书
高考标语大全
2014/06/05 职场文书
中国梦团日活动总结
2014/07/07 职场文书
建筑工程造价专业自荐信
2014/07/08 职场文书
党支部对照检查材料
2014/08/25 职场文书
党性观念心得体会
2014/09/03 职场文书
银行授权委托书样本
2014/10/13 职场文书
自主招生推荐信格式模板
2015/03/24 职场文书
党员公开承诺书2016
2016/03/24 职场文书