ホームページ  >  記事  >  データベース  >  データベースのトランザクション分離レベルは何ですか?

データベースのトランザクション分離レベルは何ですか?

青灯夜游
青灯夜游オリジナル
2019-06-12 17:08:3325413ブラウズ

データベース操作では、同時に読み取られるデータの正確性を効果的に保証するために、トランザクション分離レベルが提案されています。標準 SQL 仕様では、4 つのトランザクション分離レベルが定義されており、分離レベルが異なればトランザクションの処理方法も異なります。トランザクション分離レベルについては以下の記事で紹介していますので、ご参考になれば幸いです。

データベースのトランザクション分離レベルは何ですか?

#一般的なデータベースには 4 つの分離レベルがあり、分離レベルが異なればトランザクションの処理方法も異なります。


不正な読み取り

Read Uncommitted とも呼ばれます: ダーティ リードは許可されますが、失われた更新は許可されません。トランザクションがデータの書き込みを開始した場合、別のトランザクションが同時に書き込むことはできませんが、他のトランザクションはこのデータ行を読み取ることができます。この分離レベルは、「排他的書き込みロック」によって実現できます。

Authorized Read

Read Committed とも呼ばれます: 反復不可能な読み取りは許可されますが、ダーティ リードは許可されません。データを読み取るトランザクションにより、他のトランザクションは引き続きデータ行にアクセスできますが、コミットされていない書き込みトランザクションにより、他のトランザクションは行にアクセスできなくなります。これは、「即時共有読み取りロック」と「排他的書き込みロック」によって実現できます。

Repeatable Read

Non-Repeatable Read および Darty Read は禁止されていますが、ファントム リード データが発生する場合があります。データを読み取るトランザクションは書き込みトランザクションを無効にし (ただし、読み取りトランザクションは許可します)、書き込みトランザクションは他のトランザクションを無効にします。これは、「共有読み取りロック」と「排他的書き込みロック」によって実現できます。

シリアル化可能

厳密なトランザクション分離を提供します。トランザクションは逐次的に実行する必要がありますが、トランザクションは次々に実行することしかできず、同時に実行することはできません。トランザクションのシリアル化は、「行レベルのロック」だけでは実現できません。クエリ操作を実行したばかりのトランザクションが新しく挿入されたデータにアクセスしないようにするには、他のメカニズムを使用する必要があります。

分離レベルが高くなるほど、データの完全性と一貫性が保証されますが、同時実行パフォーマンスへの影響は大きくなります。ほとんどのアプリケーションでは、データベース システムの分離レベルを Read Committed に設定することを優先できます。ダーティ読み取りを回避でき、同時実行パフォーマンスが向上します。これにより、反復不可能な読み取り、ファントム読み取り、タイプ II の更新の消失などの同時実行性の問題が発生しますが、そのような問題が発生する可能性がある個々の状況では、アプリケーションで悲観的ロックまたは楽観的ロックを使用して制御できます。

以上がデータベースのトランザクション分離レベルは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。