如何在执行Update语句时设置变量?我似乎无法弄清楚语法。
所以我想要下面这样的东西,但它说的是语法错误:
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, @tempVariable := 100;
答案 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;
SET @tempVariable := 0;
UPDATE myTable SET col1 = 5, col2 = @tempVariable, col3 = @tempVariable := 100;
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);
希望有所帮助。