MySQLデータベース独立性レベル

1506 ワード

データベースに存在するいくつかの問題を解決するために、データベースは非常に複雑な独立性レベルを提供します.MySQL独立性レベルは、READ UNCOMMITTED(未提出読み)、READ COMMITTED(提出読み)、REPEATABLE READ(繰り返し読み可能)、SERIALIZABLE(シリアル化可能)の4種類.
 
1.READ UNCOMMITTED(未提出読み)
READ UNCOMMITTEDレベルでは、トランザクションでの修正は、コミットされていなくても他のトランザクションに対して表示されます.トランザクションは、コミットされていないデータを読み出すことができます.これは、ダーティリード(Dirty Read)とも呼ばれます.このレベルは多くの問題を引き起こし、性能上、READ UNCOMMITTEDは他のレベルよりもあまりよくないが、他のレベルの多くのメリットに欠けている.本当に必要な理由がない限り、実際の応用では一般的に使用されない.
2.READ COMMITTED(提出読み)
ほとんどのデータベース・システムのデフォルトの独立性レベルはREAD COMMITTEDです(ただしMySQLではありません).READ COMMITTEDは前述の隔離性の簡単な定義を満たしている:一つの事務が始まると、すでに提出された事務所が行った修正を「見る」しかない.すなわち、1つのトランザクションがコミットされるまで、変更されたトランザクションは他のトランザクションには表示されません.このレベルは、同じクエリを2回実行すると、異なる結果が得られる可能性があるため、繰り返し不可能(nonrepeatable read)と呼ばれることもあります.
3.REPEATABLE READ(繰り返し読み可能)
REPEATABLE READは汚れた読みの問題を解決した.このレベルは、同じトランザクションで同じレコードを複数回読み出す結果が一致することを保証します.しかし、理論的には、繰り返し読み取り可能な独立性レベルは、別のファンタジー読み取り(Phantom Read)の問題を解決することはできない.幻読とは、あるトランザクションがある範囲内のレコードを読み取ると、別のトランザクションがその範囲内に新しいレコードを挿入し、前のトランザクションが再びその範囲のレコードを読み取ると、幻行(Phantom Row)が発生することを意味する.InnoDBおよびXtraDBストレージエンジンは、マルチバージョン同時制御(MVCC,Multiversion Concurrency Control)によって、幻読みの問題を解決した.この章では、後でさらに議論します.
リピート可能はMySQLのデフォルトのトランザクション独立性レベルです.
4.SERIALIZABLE(シリアル化可能)
SERIALIZABLEは最も高い独立性レベルです.トランザクションのシリアル実行を強制することで、前述した幻読の問題を回避します.簡単に言えば、SERIALIZABLEは読み出した各ローのデータにロックをかけるため、大量のタイムアウトとロック競合の問題を引き起こす可能性があります.この独立性レベルは、実際のアプリケーションでもあまり使用されず、データの一貫性を確保し、同時性がないことを受け入れる必要がある場合にのみ使用されます.
原文を参照:http://www.coder306.cn/?p=111