关于MySQL执行UPDATE语句错误的使用“AND”替代“,”作为连接符
您目前处于:后端  2018-10-29

系列文章:

• 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 (文/顾柯鹏)  ©著作权归作者所有