• 首页
  • css3教程
  • html5教程
  • jQuery手册
  • vue手册
  • php手册
  • MySQL手册
  • apache手册
  • redis手册
  • 赋值运算符

    分配运算符

    名称描述
    :=赋值
    =分配值(作为SET语句的一部分,或作为语句的SET子句的一部分UPDATE

    • :=

      赋值运算符。使运算符左侧的用户变量采用其右侧的值。右侧的值可以是文字值,存储该值的另一个变量,或者是产生标量值的任何合法表达式,包括查询的结果(前提是该值是标量值)。您可以在同SET一条语句中执行多个分配。您可以在同一条语句中执行多个分配。

      不同于=:=运算符永远不会被解释为比较运算符。这意味着您可以:=在任何有效的SQL语句中(不仅在SET语句中)使用来为变量分配值。

      mysql> SELECT @var1, @var2;
      -> NULL, NULL
      mysql> SELECT @var1 := 1, @var2;
      -> 1, NULL
      mysql> SELECT @var1, @var2;
      -> 1, NULL
      mysql> SELECT @var1, @var2 := @var1;
      -> 1, 1
      mysql> SELECT @var1, @var2;
      -> 1, 1
      
      mysql> SELECT @var1:=COUNT(*) FROM t1;
      -> 4
      mysql> SELECT @var1;
      -> 4
      

      您可以:=在之外的其他语句中使用进行值分配SELECT,例如UPDATE,如下所示:

      mysql> SELECT @var1;
      -> 4
      mysql> SELECT * FROM t1;
      -> 1, 3, 5, 7
      
      mysql> UPDATE t1 SET c1 = 2 WHERE c1 = @var1:= 1;
      Query OK, 1 row affected (0.00 sec)
      Rows matched: 1  Changed: 1  Warnings: 0
      
      mysql> SELECT @var1;
      -> 1
      mysql> SELECT * FROM t1;
      -> 2, 3, 5, 7
      

      尽管也可以使用:=运算符在单个SQL语句中设置和读取同一变量的值,但是不建议这样做。“用户定义的变量”解释了为什么应避免这样做。

    • =

      该操作符用于在两种情况下执行值分配,以下两段将进行介绍。

      在一条SET语句中,=被视为赋值运算符,该运算符使运算符左侧的用户变量采用其右侧的值。(换句话说,在SET语句中使用时,=:=相同。)右侧的值可以是文字值,存储该值的另一个变量或产生标量值的任何合法表达式,包括查询(前提是该值是标量值)。您可以在同SET一条语句中执行多个分配。

      在语句的SET子句中UPDATE=还充当赋值运算符;但是,在这种情况下,只要满足WHERE条件的任何条件,它就会使运算符左侧命名的列采用赋给右侧的值UPDATE。您可以在语句的同一SET子句中进行多个分配UPDATE

      在任何其他上下文中,=被视为比较运算符。

      mysql> SELECT @var1, @var2;
      -> NULL, NULL
      mysql> SELECT @var1 := 1, @var2;
      -> 1, NULL
      mysql> SELECT @var1, @var2;
      -> 1, NULL
      mysql> SELECT @var1, @var2 := @var1;
      -> 1, 1
      mysql> SELECT @var1, @var2;
      -> 1, 1
      

      有关更多信息,请参见“变量分配的SET语法”,“ UPDATE语句”和“子查询”。