Mysql01---一个bug引发的血案

网友投稿 732 2022-09-02

Mysql01---一个bug引发的血案

Mysql01---一个bug引发的血案

不小心搞了个bug,差点造成严重事故,记录这血泪教训。

背景

CREATE TABLE `test` ( `id` BIGINT(20) NOT NULL AUTO_INCREMENT COMMENT '自增id', `name` string NOT NULL DEFAULT '' COMMENT '姓名', `age` int NOT NULL DEFAULT 0 COMMENT '年龄')

目的:修改name="小明"的age值,age=18

过程

错误写法

UPDATE test SET age=18and name='小明'

正确写法:

UPDATE test SET age=18where name='小明'

后果

对每一行执行,set age = (18 and name=‘小明’) 1、在MySQL中,0被认为是false,非零值被认为是true 2、and作为’与运算符’,进行逻辑判断 3、18->True,name='小明’在每一行做单独判断 4、最终,除了小明的年龄被正确置为18之外,其余人的年龄都是False->置为0

线上这种操作风险太大了,造成了几乎不可逆的后果。总之,吃一堑长一智,下次测试环境看下执行计划,受影响的行有多少,线上操作,慎之又慎!!!

2021-09-26 南京市江宁区九龙湖

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:图解 SQL 里的各种 JOIN,看完不懂来找我!
下一篇:Spark003-基础概念
相关文章

 发表评论

暂时没有评论,来抢沙发吧~