如果我有一个用户表:
id | name | age
1 | Mateus | 27
第一个事务执行更新,并使事务保持打开状态,不提交或回滚:
update User set name = 'John' where id = 1;
同时,第二个事务执行一个选择:
select * from User where id = 1;
该命令将等待第一个事务通过提交或回滚释放锁,除非第二个事务使用表提示with(nolock)
,如下所示:
select * from User with(nolock) where id = 1;
这将返回记录而不锁定事务,但是它将返回未提交的值John
而不是原始的Mateus
.
据我所知,只有两种方法可以在不锁定当前事务的情况下返回锁定的记录,一种可以使用with(nolock)
将返回记录但具有未提交值的方法,并且with(readpast)
不会返回记录。
有没有办法可以返回记录,而不锁定表,并返回它的“旧”值?