代码之家  ›  专栏  ›  技术社区  ›  Radu Maris

使用相同的值、简短的语法更新多个列

  •  0
  • Radu Maris  · 技术社区  · 6 年前

    问题摘自 mysql update multiple columns with same now()

    第二个问题:为什么此查询不更新列:

    mysql> update table set last_update=last_monitor=now() where id=1;
    Query OK, 0 rows affected (0.00 sec)
    Rows matched: 1  Changed: 0  Warnings: 0
    

    创造了一个 fiddle 来说明这种困惑。

    create table t1 (
      c1 INT NOT NULL,
      c2 INT NOT NULL
    );
    insert into t1 values (0,0);
    
    update t1 set c1=c2=1;
    
    select * from t1;
    | c1 | c2 |
    |----|----|
    |  0 |  0 |
    

    我期待着 c1 c2 着手 1 或者由于语法错误导致查询失败。

    实际结果是,查询在不更新列的情况下成功,所以 c1 c2 保持初始值为 0

    由于目前的行为对我来说毫无意义,我肯定错过了一些东西。有人能分享一下MySQL引擎(或任何其他SQL引擎)是如何计算这个表达式的吗?

    2 回复  |  直到 4 年前
        1
  •  2
  •   forpas    6 年前

    我预计c1和c2将被设置为1,或者由于以下原因导致查询失败: 语法错误。

    两者都不是真的。
    表达方式:

    c1=c2=1
    

    评估结果如下:

    c1=(c2=1)
    

    对于布尔表达式 c2=1 评估为 0 1 对于 false true 分别地
    所以 0 1. 将被分配到 c1 在这件事上 c2=1 错误的 结果将是 0 .
    必须对每列使用单独的指定:

    update t1 
    set 
      c1=1,
      c2=1;
    
        2
  •  0
  •   Strawberry    6 年前

    执行以下命令:

      SELECT c2=1 FROM t1
    

    现在喝杯咖啡好好想想。