SQL UPDATE:以前更新的列值在更多列中

时间:2014-07-24 17:31:32

标签: sql

假设我有这个问题:

UPDATE TEST SET
     a = a + 23,
     b = (b+5)/a,
     c = c + a + b
WHERE
     d = 6
   OR
     d = 10

并且列的原始值是

 a = 0
 b = 5
 c = 10

由于0的{​​{1}}值(a不会计算)或者已经有(b+5)/a,查询会崩溃。

一般问题是:在value = 23中,用于更新其他列的值是已更新列的原始值还是更新后的值?

使用的数据库有区别吗? MySQL,SQL Server,Oracle,DB2,......?

修改

在"右侧"上更新值的最佳做法是什么?

子查询会起作用吗?

如何解决多值更新的问题?子查询应该只返回1个值

UPDATE statement

2 个答案:

答案 0 :(得分:3)

在我知道除了MySQL 之外的所有SQL数据库中,所有更新都是完全同时完成的,这意味着在更新b时它将为零。

在MySQL中,the updates are done in order,这意味着一个将是23。

A very simple PostgreSQL exampleMySQL example with a different result

答案 1 :(得分:0)

在所有符合ANSI标准的数据库系统中,事务是原子的和隔离的,这意味着它们一次发生。对于给定的值,您的查询将崩溃。