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

时间:2011-12-12 13:48:09

标签: mysql sql syntax

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

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

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

5 个答案:

答案 0 :(得分:18)

这是可能的: -

 UPDATE myTable SET col1 = 5,
 col2 = (@tempVariable:=@tempVariable+1) // to increment

设置整数(不是增量)

 UPDATE myTable SET col1 = 5, 
 col2 = (@tempVariable:=100) // to assign any integer

答案 1 :(得分: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 :(得分:2)

关键是“:=”运算符。 MySQL User Variable

  

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

1使用更新列之一

SET @tempVariable := 0;

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

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

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col2 = 1000
    col3 = @tempVariable := col2 + 1;

2使用表中的其他列而不是更新列。

UPDATE myTable 
SET col1 = 5, 
    col2 = @tempVariable := 100, 
    col3 = @tempVariable := col4 + 1;

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

答案 3 :(得分:0)

我使用php或coldfusion做这样的事情,(php示例)

function something($param){

   $localVarCleaned = mysql_real_escape_string($param);

   mysql_query("
   UPDATE tablename
   SET col = ".$localVarCleaned."
   ");
}

答案 4 :(得分:0)

我使用select测试了类似的查询,它对我有用,所以我会按如下方式重写您的查询

SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = (SELECT @tempVariable + 100);

希望有所帮助。