MYSQL安全模式"sql_safe_updates"设置update和delete不带where的操作限制
前言
在数据库操作中,如果在update和delete没有加上where条件,数据将会全部修改。
不只是初识mysql的开发者会遇到这个问题,工作有一定经验的开发者有时难免也会忘记写入where条件。
今天,一个同事就发生了这种情况,手抖清空了线上一个table的所有数据(ps:这是要准备删库跑路的节奏???)。
在恢复完数据后,为了以后避免失误造成的数据全部修改或删除,设置开启mysql的安全模式。
解决方案
首先查看安全模式是否开启(OFF关闭,ON打开):
mysql> show variables like 'sql_safe_updates'; +------------------+-------+ | Variable_name | Value | +------------------+-------+ | sql_safe_updates | OFF | +------------------+-------+ row in set (0.00 sec)
打开/关闭(global全局生效 ):
set global sql_safe_updates=1;
set global sql_safe_updates=0;
安全模式设置成功后如果再次执行全表update/delete,会报错
DELETE from m_test error : You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column.
总结
如果开启了安全模式后
update语句必须满足如下条件之一才能执行成功
1)使用where子句,并且where子句中列必须为prefix索引列
2)使用limit
3)同时使用where子句和limit(此时where子句中列可以不是索引列)
delete语句必须满足如下条件之一才能执行成功
1)使用where子句,并且where子句中列必须为prefix索引列
2)同时使用where子句和limit(此时where子句中列可以不是索引列)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 零经验选手,Compose 一天开发一款小游戏!
· 因为Apifox不支持离线,我果断选择了Apipost!
· 通过 API 将Deepseek响应流式内容输出到前端