私は、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ですべての異常が発生しているのはなぜですか?実際に並行処理コントロールをサポートしていないのですか、まったくばかげていますか?
この疑問も見てください:[ファントム読み取りを生成する方法](0120-184915/how-to-produce-phantom-reads) –
MyISAMはトランザクションエンジンではありません。 –