转:mysql中安全模式sql_safe_updates

今天在做批量更新时,想起之前遇到的一个问题。

Q:在Innodb中开启一个事务,然后Update 不带where,是否会锁定全表呢?

答案是肯定的。

这里也记录一下如何避免这种情况,可以再Mysql中开启安全模式避免遗漏where产生的问题。

============================================

1.什么是安全模式
在mysql中,如果在update和delete没有加上where条件,数据将会全部修改。不只是初识mysql的开发者会遇到这个问题,工作有一定经验的工程师难免也会忘记写入where条件。为了避免失误造成的数据全部修改和删除,可开启mysql的安全模式。

3.查看安全模式

show variables like "%safe%"

 sql_safe_updates就是数据库的 安全模式。默认问关闭状态。
开启数据库可以对数据进行一些不当操作的保护。
比如:在使用update,delete操作的时候没有where条件或者limit条件的时候,就会容易误操作整张表的数据。
安全模式也是属于mysql系统变量的,所以查看的时候可以用variable 
2.设置安全模式
上面查询命令实例表示当前mysql处于安全模式打开的状态。

set sql_safe_updates=1; //安全模式打开状态
set sql_safe_updates=0; //安全模式关闭状态

3.update、delete操作
update
(1)无where条件的update,操作失败,会提示需要使用where条件作为主键。
(2)无where条件但是有limit的update,操作成功,虽然没有where条件,但是加入了limit限制。
(3)使用非索引字段作为条件进行更新,操作失败,因为条件字段不是索引字段并且没有加入limit限制。
(4)使用非索引字段作为条件并且加入limit进行更新,操作成功,虽然条件字段不是索引字段,但是有加入limit限制,所以执行成功。
(5)使用索引字段作为条件并且不加入limit进行更新,操作成功,虽然没有加入limit限制,但是条件字段为索引字段,所以执行成功。
delete
(1)无where条件的delete,操作失败,没有where条件
(2)非索引键进行条件删除,操作失败
(3)使用索引键并且不加limit限制进行删除。操作成功
(4)加入limit但是不使用where条件删除。操作失败,因为没有加入where检索条件。
————————————————
版权声明:本文为CSDN博主「卧云港」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值