2012-03-24 21 views
0

私は、JavaとJDBCを使ってMySQLでファントムの読み取りを作成しようとしています。私は、次のトランザクションを持っているファントムは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

この疑問も見てください:[ファントム読み取りを生成する方法](0120-184915/how-to-produce-phantom-reads) –

+0

MyISAMはトランザクションエンジンではありません。 –

答えて

1

私の知る限り、MyISAMテーブルは分離レベルの設定を無視します。それはexplicit on the 5.0 and 5.1 documentationでしたが、彼らは新しい文書でInnoDBへの言及を削除したようです。

+0

InnoDBでスナップショットアイソレーションをオフにする方法はありますか? – user1251858

関連する問題