0

2 つの同時 PHP/MySQL スクリプトを実行しています。gg MySQL テーブルには、スクリプトの開始時に 11 行あり、ID は 1 から 11 の範囲です。正しい関数については気にしませんが、これをある種の擬似コードとして扱います。

最初のものには、次のコードがあります。

php mysql_query "BEGIN WORK;"
php mysql_query "SELECT * FROM gg;"
php mysql_query "DELETE FROM gg WHERE id > 5;"
php "sleep(15)"
php mysql_query "SELECT * FROM gg;"
php mysql_query "COMMIT;"

最初の選択の結果は 11 行です。2 番目の選択の結果は 05 行です。

2番目のコードには、次のコードがあります(スリープなし):

php mysql_query "BEGIN WORK;"
php mysql_query "SELECT * FROM gg;"
php mysql_query "DELETE FROM gg WHERE id > 5;"
php mysql_query "SELECT * FROM gg;"
php mysql_query "COMMIT;"

最初の選択の結果は 11 行です。2 番目の選択の結果は 11 行です。

sleep 関数は、コミット前の遅延を強制するために使用されます。2 番目のトランザクションの 2 番目の選択は、最初のスクリプトからのコミット後に実行されます。

私の疑問は次のとおりです。最初のトランザクションからのコミットが既に実行されている場合、2 番目のトランザクションの 2 番目の SELECT が 11 行を返すのはなぜですか?

4

0 に答える 0