从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引擎)如何评估此表达式的信息吗?
答案 0 :(得分:2)
我期望将c1和c2设置为1或由于以下原因而导致查询失败 语法错误。
都不是真的。
表达式:
c1=c2=1
的评估方式如下:
c1=(c2=1)
对于MySql,布尔表达式c2=1
对0
或1
的求值分别为false
或true
。
因此,将0
或1
分配给c1
,在这种情况下,由于c2=1
是false
,结果将是0
。
您必须为每列使用单独的分配:
update t1
set
c1=1,
c2=1;
答案 1 :(得分:0)
执行此操作:
SELECT c2=1 FROM t1
现在喝杯咖啡,好好想一想。