我知道这行得通,但这是一种好习惯吗?
update test set field1=field1+field2, field2=0;
在将值添加到总数之前,我不想field2
设置为。这会一直按计划工作吗?0
field1
我知道这行得通,但这是一种好习惯吗?
update test set field1=field1+field2, field2=0;
在将值添加到总数之前,我不想field2
设置为。这会一直按计划工作吗?0
field1
如果 MySQL 遵循标准,它应该可以工作。但在这种情况下,它没有(遵循标准)。笔记。在标准 ISO?ANSI SQL 中,这些语句是等效的,并且在表中产生相同的更改。(任何人都可以在 SQL-Server 或 Oracle 中尝试它们。我认为第三种变体仅在 Postgres 中有效):
UPDATE test
SET field1 = field1 + field2, field2 = 0 ;
UPDATE test
SET field2 = 0, field1 = field1 + field2 ;
UPDATE test
SET (field1, field2) = (field1 + field2, 0) ;
因此,在 MySQL 中,您的语句在大多数情况下都会像您期望的那样工作,正如MySQL 文档所述:
单表
UPDATE
分配通常从左到右进行评估。对于多表更新,不能保证以任何特定顺序执行分配。
请注意“一般”。100% 确定,您可以在 2 个语句中进行更新(在事务中):
UPDATE test
SET field1 = field1 + field2 ;
UPDATE test
SET field2 = 0 ;
或使用临时表。
在手册中找到它(http://dev.mysql.com/doc/refman/5.0/en/update.html):
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
单表 UPDATE 分配通常从左到右进行评估。对于多表更新,不能保证以任何特定顺序执行分配。
所以它会一直有效