mysql中
select @t1:=(@t2:=1)+@t3:=4 最终结果输出为5
但按结果往回推运算符的优先级发现第一个:=运算符低于+,而第三个:=运算符却高于+
mysql中明确指出:=优先级低于+
求解释!

解决方案 »

  1.   

    同求指点mysql> select 1+@t:=4;
    +---------+
    | 1+@t:=4 |
    +---------+
    |       5 |
    +---------+
    1 row in set (0.00 sec)mysql> select (1+@t):=4;
    ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ':=4' at line 1
      

  2.   

    select @t1:=(@t2:=1)+@t3:=4 最终结果输出为5:= 优先级最高,方向从右向左.@t1:=(@t2:=1)+@t3:=4
    @t1:=(@t2:=1)+@t3
    @t1:=@t2+@t3
      

  3.   

    按以上解释的话@t1:=@t2+@t3应先运算红色部分。所以@t1值应为1,但下面的输出结果却否定了这一点
    mysql> SELECT @t1:=(@t2:=1)+@t3:=4,@t1,@t2,@t3;
    +----------------------+------+------+------+
    | @t1:=(@t2:=1)+@t3:=4 | @t1  | @t2  | @t3  |
    +----------------------+------+------+------+
    |                    5 |    5 |    1 |    4 |
    +----------------------+------+------+------+以上内容都是操作手册里的内容,求解释另:能找到个讨论问题的地方真好。
      

  4.   

    最高优先级     :=
    1            ||, OR, XOR
    2            &&, AND
    3            BETWEEN, CASE, WHEN, THEN, ELSE
    4            =, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN
    5            |
    6            &
    7            <<, >>
    8            -, +
    9            *, /, DIV, %, MOD
    10           ^
    11           - (unary minus), ~ (unary bit inversion)
    12           !, NOT
    最低优先级     BINARY, COLLATE 
      

  5.   

    以下是引用MySQL5.1参考手册中内容
    12.1.1. 操作符优先级
    以下列表显示了操作符优先级的由低到高的顺序。排列在同一行的操作符具有相同的优先级。 :=||, OR, XOR&&, ANDNOTBETWEEN, CASE, WHEN, THEN, ELSE=, <=>, >=, >, <=, <, <>, !=, IS, LIKE, REGEXP, IN|&<<, >>-, +*, /, DIV, %, MOD^- (一元减号), ~ (一元比特反转)!BINARY, COLLATE