mysql如何能有效防止删库跑路
目录
- 安全模式设置
- 测试
- 1.无where的update和delete
- 2、非索引键的delete
- 3.索引键的delete
- 总结
mysql安全模式:mysql发现delete、update语句没有添加where或者limit条件时会报错。整个sql将无法执行,有效防止了误删表的情况。
安全模式设置 在mysql中通过如下命令查看状态:
show variables like 'sql_safe_updates';
文章图片
默认是OFF状态,将状态设置为ON即可:
set sql_safe_updates=1;
//打开set sql_safe_updates=0;
//关闭
- 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 fromt_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 fromt_user where name='123' limit 1> Affected rows: 0> 时间: 0.002s
3.索引键的delete
delete from t_user where group_id='123'
delete fromt_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子句中列可以不是索引列)一才能执行成功。
推荐阅读
- 2018-02-06第三天|2018-02-06第三天 不能再了,反思到位就差改变
- 考研英语阅读终极解决方案——阅读理解如何巧拿高分
- 午门传说
- 如何寻找情感问答App的分析切入点
- 参保人员因患病来不及到指定的医疗机构就医,能否报销医疗费用()
- mybatisplus如何在xml的连表查询中使用queryWrapper
- MybatisPlus使用queryWrapper如何实现复杂查询
- CET4听力微技能一
- 【生信技能树】R语言练习题|【生信技能树】R语言练习题 - 中级
- 人如果没梦想,和咸鱼有什么区别(自媒体时代把握住就能咸鱼翻身)