【发布时间】:2012-11-12 14:21:55
【问题描述】:
假设我们尝试同时运行以下两个事务:
T1:
BEGIN
UPDATE place
SET state_code=5
WHERE state_code=6
AND type='town'
COMMIT
T2:
BEGIN
UPDATE place
SET state_code=6
WHERE state_code=5
AND type='town'
COMMIT
在 Postgres 9.0 上,事务成功完成。但是,当在 SQLServer 2005 T1 上运行时,T1 会中止,因此所有状态都以 state_code=5 结束。
- 哪个 DBMS 遵守/不遵守严格的事务序列化,为什么?
- 每个 DBMS 中可能设置或未设置哪些设置会导致此行为?
【问题讨论】:
-
听起来像是家庭作业。
-
SQL Server 中的错误信息是什么?
-
目前还不清楚预期的结果是什么。是否有转置价值观的意图?还是将它们设置为相同?这两种结果都可能在
READ COMMITTED或SNAPSHOT隔离中,具体取决于确切的执行顺序。
标签: sql sql-server postgresql serialization transactions