Sql server 了解事务隔离级别

Sql server 了解事务隔离级别,sql-server,isolation-level,database-concurrency,Sql Server,Isolation Level,Database Concurrency,我对这个话题还不熟悉,我正在尝试验证我所理解的。请考虑下面的例子:- 事务包含select和update语句,其中update语句取决于select语句返回的结果集。用户A和B同时执行事务,两个用户都选择了数据并将要执行更新。如果用户A首先执行更新,那么用户B可能会有bug;因为它没有最新的结果集。这称为幻影读取案例 对于可序列化隔离级别:上述情况永远不会发生。事务是完全隔离的,不能同时工作。在用户A完成其事务之前,用户B的事务无法执行select语句。用户B将等待事务A完成 对于可重复读取隔离

我对这个话题还不熟悉,我正在尝试验证我所理解的。请考虑下面的例子:-

事务包含select和update语句,其中update语句取决于select语句返回的结果集。用户A和B同时执行事务,两个用户都选择了数据并将要执行更新。如果用户A首先执行更新,那么用户B可能会有bug;因为它没有最新的结果集。这称为幻影读取案例

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

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


您能说这是否是正确的理解吗?

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

当您不关心命令发出时发生的事情时,对只读命令使用NOLOCK将在OLTP系统中带来更好的性能