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代码>(请参阅)。很高兴你给出了表达式如何计算的内部信息,因为这正是我想要的,即使我现在意识到没有明确要求它(立即更新问题)代码>(请参阅)。很高兴你给出了表达式是如何计算的,因为这正是我想要的,即使我现在意识到没有明确要求它(现在更新问题)。