0
点赞
收藏
分享

微信扫一扫

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=18
and name='小明'

正确写法:

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

后果

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

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

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


举报

相关推荐

0 条评论