MySQL データベースのロックは次のとおりです: 1. 共有ロック (データの読み取りを意味します) 2. 排他ロック (データの書き込みを意味します) 3. 行ロック (レコードの行をロックし、レコードのみに影響します)レコード; 4. トランザクションの次の行に要求されるロックの種類を明らかにするための意図的なロック。
mysql データベース ロック
1. 共有ロック、S とも呼ばれますlock)
共有ロック (S) はデータの読み取りを意味します。したがって、複数のトランザクションが同時に共有ロックをオブジェクトに追加できます。
共有ロックを生成する SQL ステートメント:
select * from ad_plan lock in share mode;
2. 排他的ロック (排他的ロック、X ロックとも呼ばれます)
排他的ロックとは、データの書き込み操作が実行されることを確認します。トランザクションがオブジェクトに排他ロックを追加すると、他のトランザクションはそれ以上ロックを追加できなくなります。
排他ロックを生成する SQL ステートメント:
select * from ad_plan for update;
3. 行ロック
レコードの行をロックし、1 つのレコードのみに影響します。
は通常、INSERT、UPDATE、DELETE などの DML ステートメントで使用されます。
InnoDB 行ロックは、インデックス上のインデックス エントリをロックすることによって実装されます。これは、データ ブロック内の対応するデータ行をロックすることによって実装される MySQL や Oracle とは異なります。
InnoDB の行ロック実装機能は、インデックス条件を通じてデータが取得される場合にのみ、InnoDB が行レベルのロックを使用することを意味します。それ以外の場合、InnoDB はテーブル ロックを使用します。
4. インテンション ロック
インテンション ロックはテーブル レベルのロックであり、その設計目的は主に、次の行に要求されるロックの種類を明らかにすることです。トランザクション中。 InnoDB の 2 つのテーブル ロック:
意図共有ロック (IS): トランザクションがデータ行に共有ロックを追加する準備をしていることを示します。つまり、データ行に共有ロックを追加する前に、テーブルを最初に取得する必要があります;
意図排他ロック (IX): 上記と同様に、トランザクションがデータ行に排他ロックを追加する準備をしていることを示し、トランザクションが最初にテーブルの IX ロックを取得する必要があることを示します。データ行に排他ロックを追加する前に、テーブルを削除してください。
インテンション ロックは InnoDB によって自動的に追加されるため、ユーザーの介入は必要ありません。
INSERT、UPDATE、DELETE の場合、InnoDB は関係するデータに排他ロックを自動的に追加します。一般的な SELECT ステートメントの場合、InnoDB はロックを追加せず、トランザクションは次のステートメントを通じて共有ロックまたは排他ロックを明示的に追加できます。
共有ロック: SELECT … LOCK IN SHARE MODE;
排他ロック: SELECT … FOR UPDATE;
ロックのレベル
## MySQL には、ロックのレベルまたは密度に応じて、ページ レベル、テーブル レベル、行レベルの 3 つのロック レベルがあります。(1) テーブル レベルのロック
# はオーバーヘッドが低く、ロックが高速です。デッドロックは発生しません。ロックの粒度が大きく、ロック競合の可能性が最も高く、ロックの精度が高くなります。同時実行性は最低です。(2) 行レベルのロック
オーバーヘッドが大きく、ロックが遅い、デッドロックが発生する可能性がある、ロックの粒度が最も小さい、ロック競合の可能性が高いは最低であり、同時実行性も低くなります。最高です。(3) ページ ロック
コストとロック時間はテーブル ロックと行ロックの間で制限されます。デッドロックが発生します。ロックの粒度はテーブル ロックと行ロックの間で制限されます。ロック 行ロック間の同時実行性は平均的です。以上がmysqlデータベースのロックとは何ですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。