我使用以下与我的真实查询类似的简化查询进行测试。
mysql> SET @a=100; SET @b=@a; SELECT @a, @b; SELECT @a:=@a+3;
...
+------+------+
| @a | @b |
+------+------+
| 100 | 100 |
+------+------+
...
它会为我返回正确的结果,因为a
等于b
且等于100
。但我使用了4个查询,而且有几个变量需要多次查询。
根据help SET
我使用语法SET variable_assignment [, variable_assignment] ...
创建查询并首次执行:
mysql> SET @a=100, @b=@a; SELECT @a, @b; SELECT @a:=@a+3;
...
+------+------+
| @a | @b |
+------+------+
| 100 | NULL |
+------+------+
...
为什么a
不等于b
且等于NULL
?
同一查询的第二次和下次执行会产生以下结果:
mysql> SET @a=100, @b=@a; SELECT @a, @b; SELECT @a:=@a+3;
...
+------+------+
| @a | @b |
+------+------+
| 100 | 103 |
+------+------+
...
为什么a
不等于b
且等于103
而不是100
?
在这种情况下它是如何工作的?
答案 0 :(得分:2)
我猜它的作用与UPDATE
语句相同。在第二个示例中,语句前面的@a值是指定的值。整个操作作为一个原子单元处理。
有关此主题的文档似乎不包括此案例,但有一个"用户评论"在底部触及完全相同的情况。
https://dev.mysql.com/doc/refman/5.1/en/set-statement.html
更新:我认为此问题已在此错误报告中解决: