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 root密码的重置方法
Apr 21 MySQL
浅谈mysql执行过程以及顺序
May 12 MySQL
修改MySQL的数据库引擎为INNODB的方法
May 26 MySQL
python中的mysql数据库LIKE操作符详解
Jul 01 MySQL
MYSQL 运算符总结
Nov 11 MySQL
一条慢SQL语句引发的改造之路
Mar 16 MySQL
MySQL中优化SQL语句的方法(show status、explain分析服务器状态信息)
Apr 09 MySQL
为什么MySQL8新特性会修改自增主键属性
Apr 18 MySQL
mysql数据库实现设置字段长度
Jun 10 MySQL
MySQL解决Navicat设置默认字符串时的报错问题
Jun 16 MySQL
MySQL外键约束(Foreign Key)案例详解
Jun 28 MySQL
SQL中去除重复数据的几种方法汇总(窗口函数对数据去重)
May 08 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
PHP企业级应用之常见缓存技术篇
2011/01/27 PHP
php中的curl_multi系列函数使用例子
2014/07/29 PHP
PHP将身份证正反面两张照片合成一张图片的代码
2017/04/08 PHP
javascript cookies操作集合
2010/04/12 Javascript
JavaScript中URL编码函数代码
2011/01/11 Javascript
js网页侧边随页面滚动广告效果实现
2011/04/14 Javascript
使用node.js半年来总结的 10 条经验
2014/08/18 Javascript
jquery加载图片时以淡入方式显示的方法
2015/01/14 Javascript
js获取页面及个元素高度、宽度的代码
2016/04/26 Javascript
JavaScript获取URL中参数querystring的方法详解
2016/10/11 Javascript
JQuery 获取Dom元素的实例讲解
2017/07/08 jQuery
jQuery读取本地的json文件(实例讲解)
2017/10/31 jQuery
浅谈JsonObject中的key-value数据解析排序问题
2017/12/06 Javascript
JS实现关键词高亮显示正则匹配
2018/06/22 Javascript
使用原生JS实现滚轮翻页效果的示例代码
2020/05/31 Javascript
微信小程序完美解决scroll-view高度自适应问题的方法
2020/08/08 Javascript
[01:01:35]Optic vs paiN 2018国际邀请赛小组赛BO2 第二场 8.19
2018/08/21 DOTA
利用soaplib搭建webservice详细步骤和实例代码
2013/11/20 Python
python正则表达式面试题解答
2020/04/28 Python
python简单商城购物车实例代码
2018/03/15 Python
Python浅复制中对象生存周期实例分析
2018/04/02 Python
python处理DICOM并计算三维模型体积
2019/02/26 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
解决Pycharm 包已经下载,但是运行代码提示找不到模块的问题
2019/08/31 Python
wxPython窗体拆分布局基础组件
2019/11/19 Python
win10从零安装配置pytorch全过程图文详解
2020/05/08 Python
python实例化对象的具体方法
2020/06/17 Python
详解tf.device()指定tensorflow运行的GPU或CPU设备实现
2021/02/20 Python
Web页面中八种创建多列等高(等高列布局)的实现技术
2012/12/24 HTML / CSS
俄罗斯领先的移动和数字设备在线商店:Svyaznoy.ru
2020/12/21 全球购物
Servlet方面面试题
2016/09/28 面试题
2014年教师培训的自我评价
2014/01/03 职场文书
老师给学生的表扬信
2014/01/17 职场文书
2014预备党员批评与自我批评思想汇报
2014/09/20 职场文书
学生党支部工作总结2015
2015/05/26 职场文书
《这片土地是神圣的》教学反思
2016/02/16 职场文书