天天看點

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

繼續閱讀