MySQL ロックの概要
MySQL のロック機構は他のデータベースと比べて比較的シンプルであり、最大の特徴は次のとおりです。ストレージ エンジンが異なれば、サポートされるロック メカニズムも異なります。たとえば、MyISAM および MEMORY ストレージ エンジンはテーブル レベルのロックを使用します。 BDB ストレージ エンジンはページ レベルのロックを使用しますが、テーブル レベルのロックもサポートします。 InnoDB ストレージ エンジンは行レベルのロックとテーブル レベルのロックの両方をサポートしますが、デフォルトでは行レベルのロックが使用されます。
テーブル レベルのロック: テーブル レベルのロックは、MySQL で最も粒度の高いロックであり、現在の操作のテーブル全体をロックすることを意味します。オーバーヘッドが低く、ロックが高速です。デッドロックは発生しません。ロックの粒度は大きく、ロック競合の可能性は最も高く、同時実行性は最も低くなります。
無料の学習ビデオ チュートリアルの共有: mysql ビデオ チュートリアル
行レベルのロック: 行レベルのロックは、MySQL で最も詳細なロックです。つまり、現在の操作中の行はロックされています。オーバーヘッドが高く、ロックが遅いため、デッドロックが発生する可能性があります。ロックの粒度は最も小さく、ロックの競合の可能性は最も低く、同時実行性は最も高くなります。
ページ レベル ロック: ページ レベル ロックは、ロック粒度が行レベル ロックとテーブル レベル ロックの間である MySQL のロックです。テーブルレベルのロックは高速ですが、多くの競合が発生します。行レベルの競合は少なくなりますが、速度は遅くなります。そこで、隣接するレコードのグループを一度にロックする、侵害されたページ レベルが採用されました。 BDB はページレベルのロックをサポートします。オーバーヘッドとロック時間はテーブル ロックと行ロックの間であり、デッドロックが発生します。ロックの粒度はテーブル ロックと行ロックの間で、同時実行性は平均的です。
上記の特性から、一般にどのロックが優れているかを言うのは難しいことがわかります。どのロックがより適切であるかは、特定のアプリケーションの特性に基づいて判断することしかできません。 !ロックの観点からのみ: テーブル レベルのロックは、Web アプリケーションなど、主にクエリベースで、インデックス条件に基づいて更新されるデータが少量しかないアプリケーションに適しています。行レベルのロックは、一部のオンライン トランザクション処理 (OLTP) システムなど、インデックス条件に従って多数の異なるデータが同時に更新され、クエリが同時に実行されるアプリケーションに適しています。
例
1. 商品を購入する際、在庫が 1 つしかない商品を 2 人が同時に購入した場合、誰が購入しますかそれ? 問題です。
2. トランザクションは、最初に在庫テーブルから商品データを取得し、次に注文を挿入し、支払い後に支払いテーブル情報を挿入するために使用されます。
3. 商品の数量を更新します。このプロセスでは、ロックを使用して限られたリソースを保護し、分離と同時実行の間の矛盾を解決できます。
ロックの分類
操作別:
読み取りロック(共有ロック): 同一データに対する複数読み取り操作が可能お互いに影響を与えることなく同時に。
書き込みロック (排他的ロック): 現在の書き込み操作が完了する前に、他の書き込みロックと読み取りロックはブロックされます。
粒度による:
テーブル ロック、行ロック、ページ ロック
おすすめの関連記事チュートリアル: mysql チュートリアル
以上がmysqlのロックメカニズムを理解する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。