【问题标题】:MySql How to set a local variable in an update statement (Syntax?)MySql 如何在更新语句中设置局部变量(语法?)
【发布时间】:2012-01-18 12:08:14
【问题描述】:

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

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

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

【问题讨论】:

  • 那之后你打算如何使用@tempVariable 的值?在存储过程中执行这个就可以了。
  • 我编辑了原始问题以展示我将如何使用它。我将使用它将 col3 更新为 temp 变量。
  • 你不能。您的更新语句试图设置一个变量 = col2。它不起作用,您可以在更新语句而不是变量中更新表。
  • @xQbert 所以没有办法在更新语句中改变变量?

标签: mysql sql syntax


【解决方案1】:

这是可能的:-

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

设置一个整数(不是增量)

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

【讨论】:

  • 也许添加update 部分,以澄清您没有使用独立的SET 语句。
  • 对过程函数不起作用,变量是局部声明的
【解决方案2】:

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

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;

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

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

【讨论】:

  • 这实际上是不好的做法。如果你的表变得很大并且你有很多索引怎么办?然后它将对性能造成巨大影响。
【解决方案3】:

关键是“:=”运算符。 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。

【讨论】:

    【解决方案4】:

    我使用 select 测试了一个类似的查询,它对我有用,所以我将重写您的查询,如下所示

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

    【讨论】:

    • 这个问题是 6 年前回答的。您的回答对已发布的解决方案有何补充?
    猜你喜欢
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2013-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-02-02
    相关资源
    最近更新 更多