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
Windows10下安装MySQL8
Apr 06 MySQL
MySQL时间盲注的五种延时方法实现
May 18 MySQL
Mysql效率优化定位较低sql的两种方式
May 26 MySQL
MySQL 使用索引扫描进行排序
Jun 20 MySQL
MySQL 数据类型详情
Nov 11 MySQL
mysql sum(if())和count(if())的用法说明
Jan 18 MySQL
一文搞清楚MySQL count(*)、count(1)、count(col)区别
Mar 03 MySQL
MySQL读取JSON转换的方式
Mar 18 MySQL
深入理解mysql事务隔离级别和存储引擎
Apr 12 MySQL
mysql实现将字符串字段转为数字排序或比大小
Jun 14 MySQL
SQL Server数据库的三种创建方法汇总
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/05/16 PHP
PHP动态页生成静态页的3种常用方法
2014/11/13 PHP
分享一则PHP定义函数代码
2015/02/26 PHP
php微信支付之APP支付方法
2015/03/04 PHP
php 使用 __call实现重载功能示例
2019/11/18 PHP
JavaScript Event学习第八章 事件的顺序
2010/02/07 Javascript
jQuery的实现原理的模拟代码 -4 重要的扩展函数 extend
2010/08/03 Javascript
JavaScript实现的双向跨域插件分享
2015/01/31 Javascript
JavaScript清空数组元素的两种方法简单比较
2015/07/10 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
jQuery使用经验小技巧(推荐)
2016/05/31 Javascript
input框中的name和id的区别
2016/11/16 Javascript
清除js缓存的多种方法总结
2016/12/09 Javascript
微信小程序 JS动态修改样式的实现代码
2017/02/10 Javascript
JS操作时间 - UNIX时间戳的简单介绍(必看篇)
2017/08/16 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
详解javascript中的Error对象
2019/04/25 Javascript
JavaScript使用百度ECharts插件绘制饼图操作示例
2019/11/26 Javascript
基于vue-draggable 实现三级拖动排序效果
2020/01/10 Javascript
利用python实现命令行有道词典的方法示例
2017/01/31 Python
Python实现的计算器功能示例
2018/04/26 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
2018/05/30 Python
详解利用Python scipy.signal.filtfilt() 实现信号滤波
2019/06/05 Python
python3中利用filter函数输出小于某个数的所有回文数实例
2019/11/24 Python
python两种获取剪贴板内容的方法
2020/11/06 Python
python中的列表和元组区别分析
2020/12/30 Python
西班牙在线宠物商店:zooplus.es
2017/02/24 全球购物
日本酒店、民宿、温泉旅馆、当地旅行团中文预订:e路东瀛
2019/12/09 全球购物
老教师工作总结的自我评价
2013/09/27 职场文书
单位消防安全制度
2014/01/12 职场文书
社区十八大感言
2014/01/19 职场文书
十佳护士获奖感言
2014/02/18 职场文书
个人贷款收入证明
2014/10/26 职场文书
2015年优质护理服务工作总结
2015/04/08 职场文书
Nginx服务器添加Systemd自定义服务过程解析
2021/03/31 Servers