2012-03-24 66 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

回答

相關問題