使用短值更新具有相同值的多个列

时间:2019-05-23 06:31:21

标签: mysql

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 |

我希望将c1c2设置为1或由于语法错误而使查询失败。

实际结果是查询成功而未更新列,因此c1c2保持为0的初始值

由于当前的行为对我来说没有意义,所以我肯定会缺少一些东西。有人可以分享一些有关MySQL引擎(或任何其他SQL引擎)如何评估此表达式的信息吗?

2 个答案:

答案 0 :(得分:2)

  

我期望将c1和c2设置为1或由于以下原因而导致查询失败   语法错误。

都不是真的。
表达式:

c1=c2=1

的评估方式如下:

c1=(c2=1)

对于MySql,布尔表达式c2=101的求值分别为falsetrue
因此,将01分配给c1,在这种情况下,由于c2=1false,结果将是0
您必须为每列使用单独的分配:

update t1 
set 
  c1=1,
  c2=1;

答案 1 :(得分:0)

执行此操作:

  SELECT c2=1 FROM t1

现在喝杯咖啡,好好想一想。