0

我知道这行得通,但这是一种好习惯吗?

update test set field1=field1+field2, field2=0;

在将值添加到总数之前,我不想field2设置为。这会一直按计划工作吗?0field1

4

2 回答 2

2

如果 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 ;

或使用临时表。

于 2013-04-30T15:24:13.187 回答
0

在手册中找到它(http://dev.mysql.com/doc/refman/5.0/en/update.html):

UPDATE t1 SET col1 = col1 + 1, col2 = col1;

单表 UPDATE 分配通常从左到右进行评估。对于多表更新,不能保证以任何特定顺序执行分配。

所以它会一直有效

于 2013-04-30T15:21:32.710 回答