【发布时间】:2016-07-27 10:49:12
【问题描述】:
给定两个交易:
T1
set transaction isolation level repeatable read;
begin transaction
select * from tmp where val=1;
update tmp set txt='rerwer11' where val=1;
waitfor delay '00:00:7';
commit;
T2
set transaction isolation level repeatable read;
begin transaction
select * from tmp where val=2;
update tmp set txt='rerwer11' where val=2;
commit;
启动 T1 并在它执行时启动 T2。我认为第一个事务只锁定带有val=1 的行,因此第二个事务不必因为处理其他行而被阻止。但事实证明,第二笔交易等待第一次完成。
如果我对它们都使用默认隔离级别(已提交读)并运行update 和xlock 提示,一切都会像我预期的那样工作:第二个只有当它尝试使用val=1 读取行时才会被阻止
【问题讨论】:
标签: sql sql-server tsql transactions