MySQLが提供するトランザクションの分離レベルはいくつかありますか?
MySQLには4つの分離レベルがあります:
- 読み込み未コミット (Read Uncommitted):あるトランザクションが実行中の場合、それが加えた変更は他のトランザクションから参照可能であり、つまりコミットされていないデータでも他のトランザクションからアクセスできます。
- 読み取りコミット(Read Committed):トランザクションが実行中のときは、トランザクションがコミットされるまで、その変更は他のトランザクションから見えず、ダーティリードを回避します。
- 同一トランザクションにおいて同一データへの読み込みを複数回行っても、取得した結果は一致する。つまり、他のトランザクションによる当該データの変更は、現トランザクションでは見えない。
- シリアライザブル:最も高い分離レベルで、他のトランザクションが実行中のトランザクションのデータを読み取ったり変更したりすることができないため、トランザクションの完全な分離を保証し、ファントム読みの問題を回避します。
SET TRANSACTION ISOLATION LEVELを使用して分離レベルを指定できます。例:
SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED;