多次插入事务中的脏读或幻读?

时间:2012-09-18 12:10:51

标签: mysql transactions

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

  1. 交易1:在表A中插入行
  2. 交易2:选择表A中的行
  3. 事务2:根据先前读取的内容
  4. 选择表B中的行
  5. 交易2:提交
  6. 交易1:在表B中插入行
  7. 交易1:提交
  8. 问题是,在两个表中T1完成写入之前,事务2选择B中的某些内容。步骤3中的select可能需要选择插入5中的行才是正确的。这是一个脏读,幻读或两者都没有。 READ_COMMITTED隔离级别是否足以避免问题?据我了解,使用READ_COMMITTED T2时不应该读取T1插入的新行。

1 个答案:

答案 0 :(得分:1)

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

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