我试图通过使用JDBC来演示MySQL中的幻像读取.我知道在REPEATABLE-READ隔离级别下,幻像应该是可能的.但我不能让一个人发生.我的交易设置如下:
交易1:
querySetOne[0] = "use adventureworks";
querySetOne[1] = "select * from vendorcontact where ContactTypeID between 10 and 30";
querySetOne[2] = "select sleep(20)";
querySetOne[3] = "select * from vendorcontact where ContactTypeID between 10 and 30";
querySetOne[4] = "COMMIT";
Run Code Online (Sandbox Code Playgroud)
交易2:
querySetTwo[0] = "use adventureworks";
querySetTwo[1] = "select sleep(2)";
querySetTwo[2] = "insert into vendorcontact values (105, 700, 20, NULL)";
querySetTwo[3] = "COMMIT";
Run Code Online (Sandbox Code Playgroud)
我把它们放在数组b/c中我使用Statement.execute()方法来执行每一行,并且我将autocommit设置为false.
为什么来自querySetOne [1]和querySetOne [3]的查询在可重复的读隔离级别下返回相同的结果?
REPEATABLE READ 不可能出现幻象。幻像是 READ COMMITTED 的结果。这是 RR 和 RC 之间的主要区别。我最近写了一篇博客文章解释这两个隔离级别,因为它们经常被混淆:http://blog.9minesnooze.com/repeatable-read-read-commissed/