web-dev-qa-db-ja.com

読み取りロックと書き込みロック

読み取りロックと書き込みロックについて少し確信がありません。読み取り/書き込みロックに関するこれらの事実が正しいかどうかを確認する人が必要です。

これは一般にデータベースを参照しています。

ロックの読み取り:

  1. 複数の読み取りロックは、同時に複数のスレッドによって取得できます。
  2. スレッドが行/テーブルに読み取りロックを持っている場合、どのスレッドもそのテーブルからデータを更新/挿入/削除できません。 (データを書き込もうとするスレッドが書き込みロックを必要としない場合でも)
  3. 行/テーブルは、読み取りロックと書き込みロックを同時に持つことはできません。

書き込みロック:

  1. 行/テーブルに書き込みロックがある場合、読み取りロックが実装されていれば別のスレッドで読み取ることはできませんが、読み取りロックが実装されていなければ(つまり、単純な選択クエリ)他のスレッドで読み取ることができます。

説明をありがとう。私はこれらの発言に対する直接の主張をインターネット上で見つけることができません。

25
nknj

データベース管理理論では、ロックは複数のデータベースユーザー間の分離を実装するために使用されます。これは、頭字語ACID(原子性、一貫性、分離性、耐久性)の「私」です。ロックはTX(トランザクション)によってデータに適用されます。これにより、TXの寿命の間、他のTXが同じデータにアクセスするのをブロックする可能性があります。

Simple Locking: 2つの主要なタイプのロックを要求できます。

  • 共有ロック:読み取りロック、つまり他のTXは読み取りはできるが書き込みはできない
  • 排他ロック:書き込みロック、つまり他のTXは読み取りまたは書き込みできません

Multiple Locking:Two Phase Locking(2PL)は、シリアライザビリティを保証する同時実行制御方式です。

  • A成長/拡張/最初のフェーズ:ロックが取得され、ロックは解放されません。
  • A縮小/契約/第2フェーズ:ロックが解放され、ロックは取得されません。
10
Premraj

isolation 使用するレベルによって異なります。

4
amit

ロックの読み取り:

  1. 複数の読み取りロックは、同時に複数のスレッドによって取得できます。

    真。複数の読み取りロックが同時に存在する可能性があります。(読み取りロックの別名は共有ロックです)

  2. スレッドが行/テーブルに読み取りロックを持っている場合、どのスレッドもそのテーブルからデータを更新/挿入/削除できません。 (データを書き込もうとするスレッドが書き込みロックを必要としない場合でも)

    真。書き込みトランザクションは、読み取りロックが読み取りを完了するのを待つ必要があります。

  3. 行/テーブルは、読み取りロックと書き込みロックを同時に持つことはできません。

    真。読み取りロックの前に書き込みロックがある場合、書き込みロックは、他のトランザクションによる同じテーブルの読み取りまたは書き込みをブロックします。書き込みロックの前に読み取りロックがある場合、読み取りロックは書き込みをブロックします。読み取りトランザクションが完了するまでトランザクション。

書き込みロック:

  1. 行/テーブルに書き込みロックがある場合、読み取りロックが実装されていれば別のスレッドで読み取ることができませんが、読み取りロックが実装されていなければ(つまり、単純なSelectクエリ)他のスレッドで読み取ることができます。

    申し訳ありませんが、このステートメントは理解できません。ただし、テーブルに書き込みロック(排他ロック)がある場合、別のトランザクションによる読み取りまたは書き込みはできません。

2
Gen Wan