MySql如何在更新语句中设置局部变量(语法?)

Ray*_*Ray 21 mysql sql syntax

如何在执行Update语句时设置变量?我似乎无法弄清楚语法.

所以我想要下面这样的东西,但它说的语法错了:

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
Run Code Online (Sandbox Code Playgroud)

ajr*_*eal 19

这个有可能 :-

 UPDATE myTable SET col1 = 5,
 col2 = (@tempVariable:=@tempVariable+1) // to increment
Run Code Online (Sandbox Code Playgroud)

设置整数(不是增量)

 UPDATE myTable SET col1 = 5, 
 col2 = (@tempVariable:=100) // to assign any integer
Run Code Online (Sandbox Code Playgroud)


kiq*_*t85 6

如果你想获得这样的东西:

SET @tempVariable := 0; UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;

你可以这样做:

  • 创建列值.

ALTER TABLE Proj ADD col3 numeric;

  • 为col3赋值以设置所需的变量(@tempVariable).

SET @tempVariable := 0; UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;

  • 删掉col3

ALTER TABLE Proj DROP col3;

通过这种方式,您可以在不更改表的属性的情况下为变量赋值.设置dinamic值时非常有用.

例如: @tempVariable := @otherVariable + 100;

  • 这实际上是不好的做法.如果你的表变大并且你有很多索引怎么办?然后它将受到巨大的性能打击. (2认同)

She*_*ang 5

关键是“:=”运算符。MySQL 用户变量

您还可以在 SET 以外的语句中为用户变量赋值。在这种情况下,赋值运算符必须是 := 而不是 =,因为后者在非 SET 语句中被视为比较运算符 =:

1 使用更新列之一

SET @tempVariable := 0;

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col3 = @tempVariable := col2 + 1;
Run Code Online (Sandbox Code Playgroud)

@tempVariable 始终为 100,col3 将始终为 101。似乎 mySQL 将使用新分配的值而不是表中的原始值。这与 MS SQL 不同。为了更清楚地说明这一点,请尝试以下示例,col3 和 @tempVariable 的值将为 1001。

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col2 = 1000
    col3 = @tempVariable := col2 + 1;
Run Code Online (Sandbox Code Playgroud)

2 使用表中除更新列之外的其他列。

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col3 = @tempVariable := col4 + 1;
Run Code Online (Sandbox Code Playgroud)

@tempVariable 和 col3 将具有相同的值。它们将是 col4 原始值 + 1。