为什么单个SET查询和几个适当的单独SET查询不相等?

时间:2015-06-05 14:44:19

标签: mysql

我使用以下与我的真实查询类似的简化查询进行测试。

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? 在这种情况下它是如何工作的?

1 个答案:

答案 0 :(得分:2)

我猜它的作用与UPDATE语句相同。在第二个示例中,语句前面的@a值是指定的值。整个操作作为一个原子单元处理。

有关此主题的文档似乎不包括此案例,但有一个"用户评论"在底部触及完全相同的情况。

https://dev.mysql.com/doc/refman/5.1/en/set-statement.html

更新:我认为此问题已在此错误报告中解决:

http://bugs.mysql.com/bug.php?id=74246