2013-08-24 75 views
0

我对这个主题很陌生,我试图验证我的理解。所以请考虑以下示例: -了解事务隔离级别

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

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

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

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

回答

0

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

如果您不关心发布命令时发生了什么,那么对于只读命令使用NOLOCK会导致OLTP系统更好的性能。