mysql如何能有效防止删库跑路
16lz
2021-12-09
mysql安全模式:mysql发现delete、update语句没有添加where或者limit条件时会报错。整个sql将无法执行,有效防止了误删表的情况。
安全模式设置
在mysql中通过如下命令查看状态:
show variables like 'sql_safe_updates';
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'> 1175 - You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column> 时间: 0.001s
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 from t_user where name='123' limit 1
delete from t_user where name='123' limit 1> Affected rows: 0> 时间: 0.002s
delete from t_user where group_id='123'> Affected rows: 0> 时间: 0s
- 使用where子句,并且where子句中列必须为prefix索引列
- 使用limit
- 同时使用where子句和limit(此时where子句中列可以不是索引列)
delete
语句必须满足如下条件之一才能执行成功
- 使用where子句,并且where子句中列必须为prefix索引列
- 同时使用where子句和limit(此时where子句中列可以不是索引列)一才能执行成功。
更多相关文章
- android有效解决加载大图片内存溢出的问题
- Android获取当前位置信息,百分之百有效
- Android(安卓)SDK无法更新解决方式(非常有效)
- 【如何在不同Android设备中得到有效的AudioRecord实例】
- Android(安卓)隐藏底部导航栏后,第一次点击失效,第二次点击有效
- Android高效加载大图、多图解决方案,有效避免程序OOM
- Android(安卓)有效的解决内存泄漏的问题实例详解
- CheckBox 设置style 没有效果的原因
- Android有效解决加载大图片时内存溢出的问题