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
MySQL 数据丢失排查案例
May 08 MySQL
MySQL中VARCHAR与CHAR格式数据的区别
May 26 MySQL
浅谈MySQL 亿级数据分页的优化
Jun 15 MySQL
解决mysql的int型主键自增问题
Jul 15 MySQL
记一次Mysql不走日期字段索引的原因小结
Oct 24 MySQL
关于mysql中时间日期类型和字符串类型的选择
Nov 27 MySQL
MySQL学习之基础命令实操总结
Mar 19 MySQL
MySQL插入数据与查询数据
Mar 25 MySQL
MYSQL优化之数据表碎片整理详解
Apr 03 MySQL
MySQL 表锁定 LOCK和UNLOCK TABLES的 SQL语法
Apr 18 MySQL
MySQL中TIMESTAMP类型返回日期时间数据中带有T的解决
Dec 24 MySQL
浅谈MySQL表空间回收的正确姿势
浅谈MySQL函数
Oct 05 #MySQL
Mysql binlog日志文件过大的解决
Oct 05 #MySQL
MySQL修炼之联结与集合浅析
MySQL分库分表详情
MySQL空间数据存储及函数
Sep 25 #MySQL
MySQL基础快速入门知识总结(附思维导图)
You might like
PHP中英混合字符串截取函数代码
2011/07/17 PHP
PHP 设计模式之观察者模式介绍
2012/02/22 PHP
PHP获取php,mysql,apche的版本信息示例代码
2014/01/16 PHP
PHP登录环节防止sql注入的方法浅析
2014/06/30 PHP
PHP实现的简单分页类及用法示例
2016/05/06 PHP
YII2 实现多语言配置的方法分享
2017/01/11 PHP
jquerymobile checkbox及时刷新才能获取其准确值
2012/04/14 Javascript
eclipse如何忽略js文件报错(附图)
2013/10/30 Javascript
DOM基础教程之使用DOM控制表格
2015/01/20 Javascript
Node.js 去掉种子(torrent)文件里的邪恶信息
2015/03/27 Javascript
Javascript实现检测客户端类型代码封包
2015/12/03 Javascript
基于bootstrap插件实现autocomplete自动完成表单
2016/05/07 Javascript
javascript简单实现跟随滚动条漂浮的返回顶部按钮效果
2016/08/19 Javascript
轻松玩转BootstrapTable(后端使用SpringMVC+Hibernate)
2017/09/06 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
解决修复npm安装全局模块权限的问题
2018/05/17 Javascript
微信小程序里引入SVG矢量图标的方法
2019/09/20 Javascript
JS中准确判断变量类型的方法
2020/06/01 Javascript
vue动态加载SVG文件并修改节点数据的操作代码
2020/08/17 Javascript
[01:54]TI4西雅图DOTA2选手欢迎晚宴 现场报道
2014/07/08 DOTA
[48:24]完美世界DOTA2联赛PWL S3 Forest vs INK ICE 第一场 12.09
2020/12/12 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python实现简单的TCP代理服务器
2014/10/08 Python
python2.7 mayavi 安装图文教程(推荐)
2017/06/22 Python
tensorflow输出权重值和偏差的方法
2018/02/10 Python
python中字典增加和删除使用方法
2020/09/30 Python
Python使用socket_TCP实现小文件下载功能
2020/10/09 Python
html2 canvas生成清晰的图片实现打印功能
2019/09/23 HTML / CSS
世界上最悠久的自行车制造商:Ribble Cycles
2017/03/18 全球购物
群众路线剖析材料
2014/02/02 职场文书
公司股权转让协议书
2014/04/12 职场文书
会计人员演讲稿
2014/09/11 职场文书
纪念九一八事变演讲稿:青少年应树立远大理想
2014/09/14 职场文书
老干部工作汇报材料
2014/10/28 职场文书
上甘岭观后感
2015/06/10 职场文书
Python爬虫入门案例之爬取去哪儿旅游景点攻略以及可视化分析
2021/10/16 Python