了解事务隔离级别

时间:2013-08-24 20:02:35

标签: sql-server isolation-level database-concurrency

我是这个话题的新手,我正在努力验证我的理解。所以请考虑以下示例: -

Transaction包含select和update语句,其中up​​date语句取决于select语句返回的结果集。用户A和B同时执行事务,两个用户都选择了数据并即将执行更新。如果用户A首先执行更新,则用户B可能会有错误;因为它没有最新的结果集。这称为Phantom Read case。

对于可序列化的隔离级别:上述情况永远不会发生。事务是完全隔离的,不能同时工作。在用户A完成其交易之前,用户B的交易不能执行选择语句。用户B将等待直到事务A完成。

对于可重复读取隔离级别:事务B可以读取但不能对数据进行修改。这可能导致幻影阅读。

你能说这是正确的理解吗?

1 个答案:

答案 0 :(得分:0)

sql server中的默认锁定方案将阻止查询返回无效数据。发出命令时,它将等待阻塞命令或在超时后返回死锁错误。受害者最容易回滚,通常是读取。这可以防止脏数据。您可能希望查看锁定提示以及绕过默认行为的各种方法。

当您不关心发出命令时发生的事情时,将NOLOCK用于只读命令将在OLTP系统中获得更好的性能。