Maison  >  Article  >  base de données  >  Stratégie de verrouillage dans le contrôle de concurrence MySQL

Stratégie de verrouillage dans le contrôle de concurrence MySQL

WBOY
WBOYoriginal
2023-12-21 09:09:37573parcourir

MySQL 锁的并发控制策略

Stratégie de contrôle de concurrence de verrouillage MySQL

Introduction :
Dans le système de base de données, afin de garantir la cohérence et l'intégrité des données, les opérations simultanées doivent être contrôlées. Le mécanisme de verrouillage est une stratégie de contrôle de concurrence couramment utilisée. En tant que système de gestion de bases de données relationnelles couramment utilisé, MySQL possède également son propre mécanisme de verrouillage. Apprenons-en davantage sur la stratégie de contrôle de concurrence des verrous MySQL et fournissons des exemples de code spécifiques.

1. Présentation des verrous MySQL :
MySQL propose plusieurs types de verrous, les plus couramment utilisés sont les verrous de ligne (Record Locks), les verrous de table (Table Locks) et les verrous optimistes (Optimistic Locks).
Le verrouillage de ligne est le mécanisme de verrouillage par défaut de MySQL Lorsqu'une donnée de ligne doit être mise à jour ou supprimée dans une transaction, les données de ligne seront verrouillées. Lorsque d'autres transactions doivent opérer sur cette ligne de données, elles doivent attendre le verrouillage. être libéré.
Le verrouillage de table est le mécanisme de verrouillage de niveau inférieur de MySQL. Il verrouille la table entière. Lorsqu'une transaction opère sur la table, les autres transactions ne peuvent effectuer aucune opération sur la table, même si ces opérations n'entrent pas en conflit.
Le verrouillage optimiste est une stratégie de contrôle de concurrence qui n'a rien à voir avec le mécanisme de verrouillage de la base de données. Il évite le problème des écritures sales en vérifiant si les données ont été modifiées par d'autres transactions avant d'effectuer des opérations d'écriture.

2. Verrouillage de ligne MySQL :
Le verrouillage de ligne dans MySQL est un contrôle de verrouillage à granularité fine. Il verrouille uniquement les lignes qui doivent être modifiées, pas la table entière. La mise en œuvre du verrouillage de ligne est basée sur le protocole de verrouillage en deux phases, c'est-à-dire : lorsque la transaction démarre, la ligne qui doit être modifiée est verrouillée, lorsque la transaction est validée, le verrou est libéré ;
Ce qui suit est un exemple de code spécifique pour l'utilisation des verrous de ligne :

-- 创建测试表
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. Verrouillage de table MySQL :
Lorsque vous devez opérer sur la table entière, vous pouvez utiliser les verrous de table pour le contrôle de concurrence. Le verrouillage de table est un contrôle de verrouillage plus grossier qui verrouille la table entière plutôt que les données de ligne. L'utilisation de verrous de table entraînera un blocage important d'autres transactions. Les verrous de table doivent donc être utilisés avec prudence dans les applications réelles.
Ce qui suit est un exemple de code spécifique pour l'utilisation des verrous de table :

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

-- 开启事务
START TRANSACTION;

-- 锁定表
LOCK TABLES test WRITE;

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

-- 解锁表
UNLOCK TABLES;

-- 提交事务
COMMIT;

4. Verrouillage optimiste MySQL :
Le verrouillage optimiste dans MySQL est une stratégie de contrôle de concurrence implémentée via les numéros de version. Chaque ligne de données a un numéro de version Lorsqu'une transaction lit des données, elle enregistre le numéro de version actuel et vérifie si son numéro de version a été modifié par d'autres transactions avant de s'engager. Si les numéros de version sont les mêmes, ils peuvent être soumis ; si les numéros de version sont différents, cela signifie que les données ont été modifiées par d'autres transactions et doivent être annulées et relues avant de réessayer l'opération.
Ce qui suit est un exemple de code spécifique utilisant le verrouillage optimiste :

-- 创建测试表
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;

Conclusion :
MySQL fournit une variété de mécanismes de verrouillage pour réaliser le contrôle de concurrence, parmi lesquels les verrous de ligne sont le type de verrouillage le plus couramment utilisé. Lorsque vous utilisez le mécanisme de verrouillage, vous devez sélectionner un mécanisme de verrouillage approprié en fonction du scénario d'application spécifique pour améliorer l'efficacité et l'exactitude des opérations de données simultanées.

Matériaux de référence :

  1. Documentation MySQL : https://dev.mysql.com/doc/
  2. Tutoriel MySQL : https://www.mysqltutorial.org/
  3. Implémentation des verrous MySQL : verrous de ligne et verrous de table :https://mp.weixin.qq.com/s/RLt1LpEBSOsGn7opxSopBA
  4. Implémentation optimiste du verrouillage MySQL et analyse des scénarios d'utilisation : https://blog.csdn.net/qq_38229163/article/details/80452138

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn