假设我有这个问题:
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
答案 0 :(得分:3)
在我知道除了MySQL 之外的所有SQL数据库中,所有更新都是完全同时完成的,这意味着在更新b时它将为零。
在MySQL中,the updates are done in order,这意味着一个将是23。
A very simple PostgreSQL example和MySQL example with a different result。
答案 1 :(得分:0)
在所有符合ANSI标准的数据库系统中,事务是原子的和隔离的,这意味着它们一次发生。对于给定的值,您的查询将崩溃。