现象
### 表结构
CREATE TABLE `wjf_test_update_num` (
`id` bigint(20) NOT NULL AUTO_INCREMENT,
`num1` int(11) DEFAULT NULL,
`num2` int(11) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=3 DEFAULT CHARSET=utf8 |
## 插入两行数据
insert into wjf_test_update_num values (null,1,2);
insert into wjf_test_update_num values (null,1,2);
select * from wjf_test_update_num;
+----+------+------+
| id | num1 | num2 |
+----+------+------+
| 1 | 1 | 2 |
| 2 | 1 | 2 |
+----+------+------+
## 更新语句1
update wjf_test_update_num set num2=num2+1,num1=num1+num2 where id = 1;
## 更新语句2
update wjf_test_update_num set num1=num1+num2,num2=num2+1 where id = 2;
### 结果
select * from wjf_test_update_num;
+----+------+------+
| id | num1 | num2 |
+----+------+------+
| 1 | 4 | 3 | ----set语句里的字段顺序影响到了最后的结果
| 2 | 3 | 3 |
+----+------+------+
官方说明:
https://dev.mysql.com/doc/refman/5.7/en/ansi-diff-update.html
这个结果与标准SQL语义是不同的,可以测试下MSSQL、ORACLE,两个语句的结果是一致的。