ホームページ  >  記事  >  データベース  >  MySQL 同時実行制御におけるロック戦略

MySQL 同時実行制御におけるロック戦略

WBOY
WBOYオリジナル
2023-12-21 09:09:37573ブラウズ

MySQL 锁的并发控制策略

MySQL ロック同時実行制御戦略

はじめに:
データベース システムでは、データの一貫性と整合性を確保するために、同時操作が必要です。管理されています。ロック メカニズムは、一般的に使用される同時実行制御戦略です。一般的に使用されるリレーショナル データベース管理システムとして、MySQL には独自のロック メカニズムもあります。MySQL ロックの同時実行制御戦略について詳しく学び、具体的なコード例を示してみましょう。

1. MySQL ロックの概要:
MySQL は複数のタイプのロックを提供しており、一般的に使用されるものは、行ロック (レコード ロック)、テーブル ロック (テーブル ロック)、および楽観的ロック (オプティミスティック ロック) です。
行ロックは MySQL のデフォルトのロック メカニズムです。トランザクションで行データを更新または削除する必要がある場合、行データはロックされます。他のトランザクションがこのデータ行を操作する必要がある場合、ロックを待つ必要があります。解放されること。
テーブル ロックは MySQL の下位レベルのロック メカニズムです。テーブル全体をロックします。トランザクションがテーブル上で動作するとき、これらの動作が競合しない場合でも、他のトランザクションはテーブル上でいかなる動作も実行できません。
オプティミスティック ロックは、データベースのロック メカニズムとは関係のない同時実行制御戦略であり、書き込み操作を実行する前にデータが他のトランザクションによって変更されているかどうかをチェックすることで、ダーティ ライトの問題を回避します。

2. MySQL 行ロック:
MySQL の行ロックは、きめ細かいロック制御であり、テーブル全体ではなく、変更が必要な行のみをロックします。行ロックの実装は 2 フェーズ ロック プロトコルに基づいています。つまり、トランザクションが開始されると、変更する必要がある行がロックされ、トランザクションがコミットされるとロックが解放されます。
次は、行ロックを使用するための具体的なコード例です:

-- 创建测试表
CREATE TABLE test (
    id INT PRIMARY KEY,
    value INT
);

-- 开启事务
START TRANSACTION;

-- 查询并锁定行
SELECT * FROM test WHERE id = 1 FOR UPDATE;

-- 修改行数据
UPDATE test SET value = 10 WHERE id = 1;

-- 提交事务
COMMIT;

3. MySQL テーブル ロック:
テーブル全体を操作する必要がある場合、同時実行制御にテーブル ロックを使用できます。テーブル ロックは、行データではなくテーブル全体をロックする、より粒度の粗いロック制御です。テーブル ロックを使用すると、他のトランザクションが大幅にブロックされるため、実際のアプリケーションではテーブル ロックを慎重に使用する必要があります。
以下はテーブル ロックを使用するための具体的なコード例です:

-- 创建测试表
CREATE TABLE test (
    id INT PRIMARY KEY,
    value INT
);

-- 开启事务
START TRANSACTION;

-- 锁定表
LOCK TABLES test WRITE;

-- 修改表数据
UPDATE test SET value = 10;

-- 解锁表
UNLOCK TABLES;

-- 提交事务
COMMIT;

4. MySQL オプティミスティック ロック:
MySQL のオプティミスティック ロックは、バージョン番号によって実装される同時実行制御戦略です。各データ行にはバージョン番号があり、トランザクションはデータを読み取るときに、現在のバージョン番号を保存し、コミットする前にそのバージョン番号が他のトランザクションによって変更されているかどうかを確認します。バージョン番号が同じ場合はコミットできますが、バージョン番号が異なる場合は、データが他のトランザクションによって変更されたことを意味するため、操作を再試行する前にロールバックして再読み取りする必要があります。
以下は、オプティミスティック ロックを使用する具体的なコード例です。

-- 创建测试表
CREATE TABLE test (
    id INT PRIMARY KEY,
    value INT,
    version INT
);

-- 开启事务
START TRANSACTION;

-- 查询并获取当前版本号
SELECT version INTO @old_version FROM test WHERE id = 1;

-- 更新数据
UPDATE test SET value = 10, version = version + 1 WHERE id = 1 AND version = @old_version;

-- 检查更新结果
IF ROW_COUNT() = 1 THEN
    COMMIT;
ELSE
    ROLLBACK;
END IF;

結論:
MySQL は、同時実行制御を実現するためにさまざまなロック メカニズムを提供します。そのうち、行ロックが最も一般的に使用されるロック タイプです。ロック メカニズムを使用する場合、同時データ操作の効率と正確性を向上させるために、特定のアプリケーション シナリオに従って適切なロック メカニズムを選択する必要があります。

参考資料:

  1. MySQL ドキュメント: https://dev.mysql.com/doc/
  2. MySQL チュートリアル: https://www.mysqltutorial. org/
  3. MySQL ロックの実装: 行ロックとテーブル ロック: https://mp.weixin.qq.com/s/RLt1LpEBSOsGn7opxSopBA
  4. MySQL オプティミスティック ロックの実装と使用シナリオの分析 :https: //blog.csdn.net/qq_38229163/article/details/80452138

以上がMySQL 同時実行制御におけるロック戦略の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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