【问题标题】:Understanding Transaction Isolation Levels了解事务隔离级别
【发布时间】:2013-08-27 16:09:50
【问题描述】:

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

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

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

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

      猜你喜欢
      • 2015-10-18
      • 2011-05-07
      • 2010-11-22
      • 2011-09-30
      • 2015-07-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多