ホームページ  >  記事  >  データベース  >  一般的な MySQL ロック タイプ

一般的な MySQL ロック タイプ

WBOY
WBOYオリジナル
2023-12-21 08:52:291487ブラウズ

MySQL 中常见的锁类型

MySQL の一般的なロック タイプには特定のコード例が必要です

はじめに:
データベース内で、複数のクライアントが同じデータを同時に読み取るとき、またはデータを変更するとき、同時操作で問題が発生する可能性があります。データの一貫性と整合性を確保するために、データベース エンジンはロック メカニズムを使用して共有データへのアクセスを制御します。一般的に使用されるリレーショナル データベースとして、MySQL はさまざまなロック タイプも提供します。この記事では、MySQL の一般的なロック タイプを紹介し、具体的なコード例を示します。

1. 共有ロック
共有ロック (読み取りロックとも呼ばれます) は、同時読み取りに使用されるロックです。複数のクライアントは、互いにブロックすることなく、同時に共有ロックを取得できます。共有ロックを使用すると、複数のクライアントによって同時に読み取られるデータの一貫性を確保できます。

サンプル コード:

-- 接続 1:
START TRANSACTION;
SELECT * FROM table1 WHERE id = 1 LOCK IN SHARE MODE;
-- 接続 2: (接続 1 が共有ロックを解放する前に実行されます)
START TRANSACTION;
SELECT * FROM table1 WHERE id = 1 LOCK IN SHARE MODE;

上記のコードでは、接続 1 と接続 2 の両方が共有ロックを取得すると、table1テーブルのid=1のデータを同時に読み込むことができます。

2. 排他的ロック
排他的ロック (書き込みロックとも呼ばれます) は、同時書き込みまたは変更に使用されるロックです。複数のクライアントが同じデータを同時に書き込みまたは変更する場合、排他ロックにより 1 つのクライアントのみがデータを書き込むことができるため、データの整合性が保証されます。

サンプル コード:

-- 接続 1:
START TRANSACTION;
SELECT * FROM table1 WHERE id = 1 FOR UPDATE;
-- 接続 2:(In接続 1 が排他ロックを解放する前に実行されます)
START TRANSACTION;
SELECT * FROM table1 WHERE id = 1 FOR UPDATE;

上記のコードでは、接続 1 と接続 2 の両方が排他ロックを取得します。接続 1 のみが、table1 テーブルに id=1 のデータを書き込むことができます。

3. インテンション ロック
インテンション ロックは、共有ロックと排他ロックの関係を調整するために使用されるロックです。トランザクションがテーブルの共有ロックまたは排他ロックを取得すると、インテンション ロックは他のトランザクションがロックのステータスを認識できるように警告メカニズムを提供できます。インテンション ロックは、インテンション共有ロック (IS) とインテンション排他ロック (IX) の 2 種類に分類されます。

サンプルコード:

-- 接続 1:
START TRANSACTION;
LOCK TABLES table1 READ;
-- 接続 2:(接続 1 でインテント共有が解放されていませんロックの前に実行)
START TRANSACTION;
LOCK TABLES table1 READ;

上記のコードでは、接続 1 がインテンション共有ロックを取得し、接続 2 もインテンション共有ロックを取得して、 table1 テーブル データ。

4. 行ロック
行ロックはデータ行レベルのロックです。複数のトランザクションが同じテーブルの異なる行で同時に動作する場合、行ロックにより、1 つのトランザクションのみが特定の行を変更できるようになり、同時アクセスの効率が向上します。

サンプル コード:

-- 接続 1:
START TRANSACTION;
SELECT * FROM table1 WHERE id = 1 FOR UPDATE;
-- 接続 2:(In接続 1 が行ロックを解放する前に実行)
START TRANSACTION;
SELECT * FROM table1 WHERE id = 2 FOR UPDATE;

上記のコードでは、接続 1 が行ロックを取得し、table1 を変更します。テーブル内の id=1 のデータの場合、接続 2 は、id=2 のデータを取得して変更する前に、接続 1 がロックを解放するのを待ちます。

結論:
この記事では、共有ロック、排他ロック、インテンション ロック、行ロックなど、MySQL の一般的なロック タイプを紹介し、具体的なコード例を示します。データの一貫性と整合性を確保するには、ロックの使用方法を理解し、習得することが重要です。実際の開発では、データベース操作の正確性と効率性を確保するために、特定のビジネス ニーズや同時アクセス条件に基づいて適切なロック タイプを選択し、ロック メカニズムを合理的に使用する必要があります。

以上が一般的な MySQL ロック タイプの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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