使用mysql进行变量赋值

时间:2011-02-07 16:57:47

标签: sql mysql variables

我使用mysql的变量赋值,我发现了一个奇怪的行为。

请参阅此查询:

SET @v1=0;
SET @v2=0;

SELECT @v1, @v2 
FROM MyTable table 
WHERE (@v1:=@v2) is not null 
  AND (@v2:=2) is not null;

我原以为按此顺序解析条件: 第一个(@v1:=@v2) is not null 并在(@v2:=2) is not null之后

所以结果必须是:

@v1 | @v2
---------
 0  |  2

但事实并非如此。尝试此查询,您将拥有:

@v1 | @v2
---------
 2  |  2

为什么?

3 个答案:

答案 0 :(得分:1)

SQL是一种声明性语言,因此您不能假设您的条件按您编写它们的顺序进行评估。您告诉引擎您想要什么,可以自由决定如何获取

答案 1 :(得分:0)

优化器不一定使WHERE子句中的表达式顺序与查询相同。您不能依赖任何特定的评估顺序

答案 2 :(得分:0)

查询优化器可以以任何方式自由地重写和执行代码。不要依赖它以你期望的任何方式工作。