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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值