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

Mysql 使用相同的值、短语法更新多个列,mysql,Mysql,摘自 第二个问题:为什么此查询不更新列: 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 创建了一个示例来说明这种混乱 create table t1 ( c1 INT NOT NULL, c2 INT NOT NULL ); insert

摘自

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

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
创建了一个示例来说明这种混乱

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引擎)是如何计算这个表达式的吗

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

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

c1=c2=1
评估结果如下:

c1=(c2=1)
对于MySql,布尔表达式
c2=1
对于
false
true
分别计算为
0
1

因此
0
1
将分配给
c1
,在这种情况下,由于
c2=1
false
,结果将为
0

必须对每列使用单独的指定:

update t1 
set 
  c1=1,
  c2=1;
我希望c1和c2被设置为1,或者由于以下原因导致查询失败 语法错误

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

c1=c2=1
评估结果如下:

c1=(c2=1)
对于MySql,布尔表达式
c2=1
对于
false
true
分别计算为
0
1

因此
0
1
将分配给
c1
,在这种情况下,由于
c2=1
false
,结果将为
0

必须对每列使用单独的指定:

update t1 
set 
  c1=1,
  c2=1;
执行以下命令:

  SELECT c2=1 FROM t1
现在喝杯咖啡好好想想。

执行以下操作:

  SELECT c2=1 FROM t1

现在喝杯咖啡好好想想。

为什么不为这些列将默认值设置为1?但是c2等于0为什么不为这些列将默认值设置为1?但是c2等于0可以随时更新t1 set c1=1,c2=c1(请参阅)。很高兴你给出了表达式如何计算的内部信息,因为这正是我想要的,即使我现在意识到没有明确要求它(立即更新问题)(请参阅)。很高兴你给出了表达式是如何计算的,因为这正是我想要的,即使我现在意识到没有明确要求它(现在更新问题)。