试图在REPEATABLE-READ隔离级别下在MySQL中创建一个幻像

use*_*858 7 java mysql jdbc

我试图通过使用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]的查询在可重复的读隔离级别下返回相同的结果?

Aar*_*own 0

REPEATABLE READ 不可能出现幻象。幻像是 READ COMMITTED 的结果。这是 RR 和 RC 之间的主要区别。我最近写了一篇博客文章解释这两个隔离级别,因为它们经常被混淆:http://blog.9minesnooze.com/repeatable-read-read-commissed/