0

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

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

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

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

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

4

1 回答 1

0

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

当您不关心发出命令时发生的情况时,将 NOLOCK 用于只读命令将导致 OLTP 系统的性能更好。

于 2013-08-25T03:00:27.987 回答