【发布时间】:2012-09-18 21:48:57
【问题描述】:
我了解在isolation levels 的维基百科页面上给出的“脏读”和“幻读”示例。但是,我不确定如何对以下情况进行分类,以及应用什么隔离级别或不同的策略来避免这种情况。
- 事务 1:在表 A 中插入行
- 事务 2:选择表 A 中的行
- 事务 2:根据之前读取的内容选择表 B 中的行
事务 2:提交- 事务 1:在表 B 中插入行
- 事务 1:提交
问题是事务 2 在 T1 在两个表中完成写入之前选择了 B 中的某些内容。第 3 步中的选择可能需要选择 5 中插入的行才能正确。这是脏读,幻读还是两者都不是。 READ_COMMITTED 隔离级别是否足以避免问题?据我了解,使用 READ_COMMITTED T2 不应该读取 T1 在此时插入的新行。
【问题讨论】:
-
您在第 4 步中提交了什么 - 我没有看到事务 2 修改任何数据?
-
@Kaivosukeltaja 因为它只是 SELECTS,所以在 T2 上没有实际提交。我只是添加它以表明该事务没有更多操作。我将编辑问题以使其更清楚。
标签: mysql transactions