官方文档 https://dev.mysql.com/doc/refman/8.0/en/ansi-diff-update.html
create database db2;
use db2;
create table t1(id int , col1 int , col2 int);
insert into t1 select 1,11,22;
insert into t1 select 2,12,33;
select * from t1;
+------+------+------+
| id | col1 | col2 |
+------+------+------+
| 1 | 11 | 22 |
| 2 | 12 | 33 |
+------+------+------+
2 rows in set (0.00 sec)
执行下面的这个update语句
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
请问最新的col1和col2数值是多少?
答案1:
1 11 11
2 12 12
答案2:
1 12 12
2 13 13
正确答案:
select * from t1;
+------+------+------+
| id | col1 | col2 |
+------+------+------+
| 1 | 12 | 12 |
| 2 | 13 | 13 |
+------+------+------+
2 rows in set (0.01 sec)
原因官方文档上写的很详细。
如果在表达式中访问要更新的表中的列,则UPDATE使用该列的当前值。以下语句中的第二个赋值将col2设置为当前(更新的)col1值,而不是原始col1值。结果是col1和col2具有相同的值。这种行为不同于标准SQL。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。