如何在执行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)
如果你想获得这样的东西:
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
你可以这样做:
ALTER TABLE Proj ADD col3 numeric;
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;
ALTER TABLE Proj DROP col3;
通过这种方式,您可以在不更改表的属性的情况下为变量赋值.设置dinamic值时非常有用.
例如: @tempVariable := @otherVariable + 100;
关键是“:=”运算符。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。