Read Committed 分離レベルが設定されていて、トランザクションでファントム読み取りが行われるとどうなりますか。ロールバックして再実行しますか、それとも単にロールバックしますか?
3 に答える
コミットされた読み取りの分離に関する私の理解が不安定でない限り (常に可能性があります)、コミットされた読み取りの要点は、ファントム行 (別のトランザクションによって変更されたが、変更がコミットされず、後でロールバックされた行) が表示されないことです。したがって、アプリケーション レベルでは、コミットされた読み取りの分離により、アプリケーションはファントムを認識できません。
DBMS が内部的に行うことは、DBMS によって異なります。MVCC システムでは、トランザクションは、トランザクションの開始時にコミットされたバージョンを読み取るだけです。ロック システムでは、他のトランザクションのロックにヒットすると、自分のトランザクションがスキップまたはブロックされる可能性があります。ただし、知る限り、この問題により、DBMS はトランザクションをロールバックしません。
いいえ、それによって何かがロールバックされることはありません。何が起こるかというと、あなたのコードは悪いデータを見て、おそらくそれに基づいて悪い決定を下すだけです。
古いデータが表示される場合があります (2 回目の読み取りで、その行がそのテーブルにあり、列が更新された場合のみ)。データを悪くするようなことから身を守るには、楽観的ロックを使用してください。