微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

执行update语句没有添加where条件会怎么样

今天就跟大家聊聊有关执行update语句没有添加where条件会怎么样,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。

过年也不能安稳啊,最近几天大家都没心工作了,工作量也少。但是一些同事高兴过度了,执行 update 语句竟然没有添加 where 条件!

What?竟然这么牛X,日天了。这样的同事长的帅吗?

微信群里,一连串的反映,我看了都要崩溃。还好,这次事故是发生在测试环境!

但是测试环境也不能乱操作不是,你把测试环境搞坏了,测试团队还怎么进行!这个锅谁来背?

虽然,同事在操作上有些问题,但这个锅不能全扣他头上,我给大家的权限太大了也是一个问题。所以,我先恢复事故现场,然后又配置了一点安全限制,update、delete 相关操作,没有 where 条件,不能执行 sql

为了演示我的恢复操作,我先给大家简化一下我的数据表。

执行update语句没有添加where条件会怎么样

假设里面现在有 10 万条数据。现在需要将 id 等于 88 的用户的地址改为“上海”,但是 update 时没有添加 where 条件。

执行update语句没有添加where条件会怎么样

事故发生后,我们现在开始恢复,在线上的话,应该比较复杂,要先进行锁表,以免数据再次被污染。锁表,就是查看正在写哪个二进制日志文件

执行update语句没有添加where条件会怎么样

执行update语句没有添加where条件会怎么样

分析二进制日志 mysql-bin.000024,并且在其中找到相关记录,在更新时是 address='上海',我们可以在日志中过滤出来。

执行update语句没有添加where条件会怎么样

过滤内容如下:

执行update语句没有添加where条件会怎么样

执行update语句没有添加where条件会怎么样

可以看见里面记录了每一行的变化,这也是 binglog 格式要一定是 row 才行的原因。其中 @1,@2,@3,@4 分别对应表中 id,name,sex,address 字段。相信大家看到这里有点明白了吧,我们只需要将相关记录转换为 sql 语句,重新导入数据库即可完成数据恢复。

关于过滤处理成 sql 语句的内容,我就补贴了。我是通过 shell 来实现的,你们也可以使用 binlog2sql 工具,这个工具现在回滚更加方便。

过滤完了之后,我们在导入数据。解锁表。

执行update语句没有添加where条件会怎么样

完美,现在数据全部都恢复回来了。

但是权限问题,还要加以限制。于是我在 MysqL配置文件中加入了 safe-updates 配置。这样,再有不加条件的更新和删除操作,都会失败。提示:ERROR 1175 (HY000): You are using safe update mode and you tried to update a table without a WHERE that uses a KEY column。

看完上述内容,你们对执行update语句没有添加where条件会怎么样有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注编程之家行业资讯频道,感谢大家的支持

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐