3

我了解隔离级别的维基百科页面上为“脏读”和“幻读”给出的示例。但是,我不确定如何对以下情况进行分类,以及应用什么隔离级别或不同的策略来避免这种情况。

  1. 事务 1:在表 A 中插入行
  2. 事务 2:选择表 A 中的行
  3. 事务 2:根据之前读取的内容选择表 B 中的行
  4. 事务 2:提交
  5. 事务 1:在表 B 中插入行
  6. 事务 1:提交

问题是事务 2 在 T1 在两个表中完成写入之前选择了 B 中的某些内容。第 3 步中的选择可能需要选择 5 中插入的行才能正确。这是脏读,幻读还是两者都不是。READ_COMMITTED 隔离级别是否足以避免问题?据我了解,使用 READ_COMMITTED T2 不应读取 T1 在此时插入的新行。

4

1 回答 1

1

这是一个脏读。在READ_COMMITTED隔离级别,步骤 2 中的查询不会返回您在步骤 1 中插入但尚未提交的行,从而防止尝试访问尚未插入的数据失败。

幻读意味着您在事务 2 中执行了两次相同的查询并获得了不同的结果集。

于 2012-09-18T13:48:57.507 回答