2012-03-24 61 views
0

我试图在Java中使用Java和JDBC创建幻像读取。我有以下的交易幻影在InnoDB,MyISAM和其他引擎中读取

交易1:

String[] querySetOne = new String[5]; 
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"; 

事务2:

String[] querySetTwo = new String[4];  
querySetTwo[0] = "use adventureworks"; 
querySetTwo[1] = "select sleep(2)"; 
querySetTwo[2] = "insert into vendorcontact values (105, 700, 20, NULL)"; 
querySetTwo[3] = "COMMIT"; 

我试图创建一个幻影使用的是InnoDB数据库引擎的可重复读隔离级别读取,但我现在的理解是,MySQL使用快照隔离与REPEATABLE READ和SERIALIZABLE隔离级别相结合。 然后我把我的数据库引擎切换到MyISAM,发现它没有演示任何并发控制;当我使用MyISAM时,丢失的更新,不可重读的读取,脏读取和幻像出现在所有隔离级别上。我有几个问题:

  • 什么数据库引擎可以使用,将使用并发控制但没有快照隔离,我将如何得到它?
  • 有没有办法在InnoDB中打开快照隔离?
  • 为什么MyISAM上发生的所有异常,它实际上不支持任何类型的并发控制,或者我只是愚蠢?
+0

看看这个问题:[如何产生幻像读取?](http://stackoverflow.com/questions/5444915/how-to-produce-phantom-reads) – 2012-03-26 23:04:57

+0

MyISAM不是一个事务引擎。 – 2012-03-26 23:05:32

回答

相关问题