系列文章:
• MySQL执行UPDATE语句错误
• Mysql-慢sql优化方法论
• 联合索引致SQL查询效率慢
• MySQL datetime 精度
正确的UPDATE语句:
UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition_column = condition_value
错误的写成:
UPDATE table_name SET column1 = value1 AND column2 = value2 WHERE condition_column = condition_value
这造成了一些小麻烦
举例:
CREATE TABLE `user` (
`id` int(5) NOT NULL AUTO_INCREMENT,
`user_name` varchar(500) NOT NULL DEFAULT '',
`age` tinyint(4) NOT NULL DEFAULT '0',
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
新增一条记录
INSERT INTO user(user_name,age) VALUES ('zhangsan',20);

执行错误的UPDATE语句
UPDATE user SET age = 30 AND user_name = 'lisi' WHERE id = 1
期望结果是将id=1的这条记录中user_name列更新为“lisi”,age列更新为“30”
然而实际执行结果

实际结果是user_name字段没有被更新,age字段则被更新成了0
在执行一条语句
UPDATE user SET age = 30 AND user_name = 'zhangsan' WHERE id = 1
这次执行的语句与之前唯一不同的是这次要更新的user_name与当前行中的user_name值相同

age字段变成了1
MySQL的解析逻辑 30 与 user_name = 'zhangsan'
第一次user_name = 'lisi',假,所以更新为0
第二次user_name = 'zhangsan',真,所以更新为1
我们利用查询语句也能得出结论
SELECT 30 AND user_name = 'zhangsan' column1, 30 AND user_name = 'lisi' column2 FROM user

本文受原创保护,未经作者授权,禁止转载。
linkedkeeper.com (文/顾柯鹏) ©著作权归作者所有
|