不小心搞了個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