Table des matières
Verrouillage MySQL :
Mécanisme de verrouillage :
Classification des serrures :
Maison base de données tutoriel mysql Quel est le concept du mécanisme de verrouillage MySQL

Quel est le concept du mécanisme de verrouillage MySQL

Jun 03, 2023 pm 06:01 PM
mysql

Quel est le concept du mécanisme de verrouillage MySQL

Verrouillage MySQL :

Pour garantir l'exactitude des données dans un environnement multithread, il est généralement nécessaire d'utiliser un mécanisme de synchronisation. La synchronisation équivaut au verrouillage. Le but du verrou est que lorsqu'un thread exploite des données, les autres threads doivent attendre, ce qui peut apporter les avantages suivants. Lorsqu'un thread termine son exécution, le verrou est libéré. Seuls les autres threads peuvent effectuer des opérations !

Ensuite, la fonction des verrous dans notre base de données MySQL est similaire. Dans l'isolement du traitement des transactions, des problèmes tels que des lectures sales, des lectures non répétables et des lectures fantômes peuvent survenir. Par conséquent, le rôle des verrous peut également résoudre ces problèmes !

Dans une base de données, les données sont une ressource partagée par de nombreux utilisateurs. Comment assurer la cohérence et l'efficacité de l'accès simultané aux données est un problème que toutes les bases de données doivent résoudre. En raison des caractéristiques de sa propre architecture, MySQL dispose de moteurs. tous conçus avec des mécanismes de verrouillage pour des scénarios spécifiques, de sorte que les différences entre les moteurs conduisent à des mécanismes de verrouillage très différents.

Mécanisme de verrouillage :

Afin d'assurer la cohérence des données, la base de données utilise une règle conçue en utilisant diverses ressources partagées pour devenir ordonnée lors d'accès simultanés.

Par exemple : lors de l'achat d'un produit sur un site de commerce électronique, il n'y a qu'un seul produit dans la liste de produits, et à ce moment-là, deux personnes l'achètent en même temps, donc qui peut l'acheter est une question clé.

Les transactions seront utilisées ici pour effectuer une série d'opérations :

Récupérez d'abord les données de l'article de la table des produits

Puis insérez la commande

Après le paiement, insérez les informations du tableau de paiement

Mettre à jour la quantité des articles dans la table des produits

Dans le processus ci-dessus, les verrous peuvent être utilisés pour protéger les informations sur les données de quantité de produit et réaliser l'isolement, c'est-à-dire que seul le premier utilisateur est autorisé à terminer l'ensemble du processus d'achat, tandis que les autres utilisateurs ne peuvent qu'attendre, résolvant ainsi le problème. problème de conflit en simultanéité.

Classification des serrures :

Classification par opération :

Serrure partagée : également appelée serrure en lecture. Plusieurs transactions peuvent lire les mêmes données en même temps et se verrouiller en même temps pour éviter de s'affecter mutuellement, mais elles ne peuvent pas modifier les enregistrements de données.

Verrou exclusif : également appelé verrouillage en écriture. Avant que l'opération en cours ne soit terminée, elle bloquera la lecture et l'écriture des autres opérations. Classification par granularité :

Verrouillage au niveau de la table : Pendant l'opération, la table entière sera verrouillée. La surcharge est faible et le verrouillage est rapide ; aucun blocage ne se produira ; la force de verrouillage est forte, la probabilité de conflit de verrouillage est élevée et la concurrence est la plus faible. Préférez le moteur de stockage MyISAM !

Verrouillage au niveau de la ligne : pendant le fonctionnement, la ligne d'opération en cours sera verrouillée. Dans le cas d'une concurrence élevée, la granularité du verrouillage est faible, ce qui est bénéfique pour réduire la probabilité de conflits de verrouillage, mais il faut prêter attention à la vitesse de l'opération de verrouillage pour éviter une surcharge excessive, et l'apparition d'un blocage doit être évitée. Préférez le moteur de stockage InnoDB !

Verrouillage au niveau de la page : la granularité du verrouillage, la probabilité de conflit et le coût de verrouillage se situent entre les verrous de table et les verrous de ligne. Des blocages se produiront et les performances de concurrence sont moyennes.

Classé par usage :

Verrouillage pessimiste : Chaque fois que vous interrogez les données, vous pensez que d'autres vont les modifier. C'est très pessimiste, vous les verrouillez donc lors de l'interrogation.

Verrouillage optimiste : chaque fois que vous interrogez les données, vous pensez que d'autres ne les modifieront pas. Vous êtes très optimiste, mais lors de la mise à jour, vous jugerez si d'autres ont mis à jour les données pendant cette période

Verrous pris en charge par différents stockages. moteurs

Sharing Lock : Quel est le concept du mécanisme de verrouillage MySQL

Plusieurs verrous partagés peuvent être partagés. S'il y a une clé, InnoDB utilise par défaut un verrou de ligne. Sinon, il sera mis à niveau vers un verrou de table. plusieurs fenêtres peuvent modifier les données dans différentes lignes. Si elles se trouvent dans la même ligne, elles doivent le faire. Si vous attendez que le premier commit verrouillé soit soumis, différentes lignes peuvent être modifiées directement, mais si vous souhaitez interroger l'autre, vous devez le faire. pour attendre les commits modifiés ultérieurs. Le verrou disparaît après la soumission

Verrouillage partagé :

SELECT语句 LOCK IN SHARE MODE;
Copier après la connexion

Fenêtre 1 :

- 窗口1
/*
    共享锁:数据可以被多个事务查询,但是不能修改
*/
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录。加入共享锁
SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
-- 查询分数为99分的数据记录。加入共享锁
SELECT * FROM student WHERE score=99 LOCK IN SHARE MODE;
-- 提交事务
COMMIT;
Copier après la connexion

Fenêtre 2 :

-- 窗口2
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录(普通查询,可以查询)
SELECT * FROM student WHERE id=1;
-- 查询id为1的数据记录,并加入共享锁(可以查询。共享锁和共享锁兼容)
SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
-- 修改id为1的姓名为张三三(不能修改,会出现锁的情况。只有窗口1提交事务后,才能修改成功)
UPDATE student SET NAME='张三三' WHERE id = 1;
-- 修改id为2的姓名为李四四(修改成功,InnoDB引擎默认是行锁)
UPDATE student SET NAME='李四四' WHERE id = 2;
-- 修改id为3的姓名为王五五(修改失败,InnoDB引擎如果不采用带索引的列加锁。则会提升为表锁)
UPDATE student SET NAME='王五五' WHERE id = 3;
-- 提交事务
COMMIT;
Copier après la connexion

Verrouillage exclusif :

Lorsque le verrouillage exclusif est exécuté, des requêtes ordinaires d'autres transactions peuvent être effectuées, mais aucune opération de verrouillage sont autorisés

-- 标准语法
SELECT语句 FOR UPDATE;
Copier après la connexion

Fenêtre 1 :

-- 窗口1
/*
    排他锁:加锁的数据,不能被其他事务加锁查询或修改
*/
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录,并加入排他锁
SELECT * FROM student WHERE id=1 FOR UPDATE;
-- 提交事务
COMMIT;
Copier après la connexion

Fenêtre 2 :

-- 窗口2
-- 开启事务
START TRANSACTION;
-- 查询id为1的数据记录(普通查询没问题)
SELECT * FROM student WHERE id=1;
-- 查询id为1的数据记录,并加入共享锁(不能查询。因为排他锁不能和其他锁共存)
SELECT * FROM student WHERE id=1 LOCK IN SHARE MODE;
-- 查询id为1的数据记录,并加入排他锁(不能查询。因为排他锁不能和其他锁共存)
SELECT * FROM student WHERE id=1 FOR UPDATE;
-- 修改id为1的姓名为张三(不能修改,会出现锁的情况。只有窗口1提交事务后,才能修改成功)
UPDATE student SET NAME='张三' WHERE id=1;
-- 提交事务
COMMIT;
Copier après la connexion

Verrou MyISAM :

Verrou de lecture MyISAM :

myisam est un verrou pour toute la table. Lors de la lecture du verrou, s'il n'est pas déverrouillé, tous. les transactions peuvent être vérifiées, mais aucune autre opération, y compris la propre transaction, ne peut être effectuée

-- 加锁
LOCK TABLE 表名 READ;
-- 解锁(将当前会话所有的表进行解锁)
UNLOCK TABLES;
Copier après la connexion

Verrou en écriture MyISAM :

Lors de l'écriture du verrou, tant que les autres transactions ne sont pas déverrouillées, aucune opération ne peut être effectuée et la propre transaction peut être utilisé

-- 标准语法
-- 加锁
LOCK TABLE 表名 WRITE;
-- 解锁(将当前会话所有的表进行解锁)
UNLOCK TABLES;
Copier après la connexion

Verrou pessimiste :

Il est très pessimiste à l'égard des données modifiées par le monde extérieur et pense que les données seront modifiées à tout moment.

Les données doivent être verrouillées pendant tout le traitement des données. Le verrouillage pessimiste repose généralement sur le mécanisme de verrouillage fourni par les bases de données relationnelles.

Les verrous de ligne et les verrous de table sont tous deux des verrous pessimistes, qu'il s'agisse de verrous en lecture ou en écriture.

Verrouillage optimiste :

est très optimiste. Chaque fois que vous exploitez les données, vous pensez que personne ne les modifiera, donc vous ne les verrouillez pas.

Mais lors de la mise à jour, il sera jugé si les données ont été modifiées pendant cette période.

Les utilisateurs doivent l'implémenter eux-mêmes. La préemption simultanée des ressources ne se produira pas. Ce n'est que lors de la soumission de l'opération que l'intégrité des données est vérifiée pour toute violation.

Implémentation simple du verrouillage optimiste :

Idée d'implémentation : ajouter des marqueurs pour comparer, s'ils sont identiques, ils seront exécutés, s'ils sont différents, ils ne seront pas exécutés

方式一:版本号

给数据表中添加一个version列,每次更新后都将这个列的值加1。

读取数据时,将版本号读取出来,在执行更新的时候,比较版本号。

如果相同则执行更新,如果不相同,说明此条数据已经发生了变化。

用户自行根据这个通知来决定怎么处理,比如重新开始一遍,或者放弃本次更新。

-- 创建city表
CREATE TABLE city(
    id INT PRIMARY KEY AUTO_INCREMENT,  -- 城市id
    NAME VARCHAR(20),                   -- 城市名称
    VERSION INT                         -- 版本号
);
-- 添加数据
INSERT INTO city VALUES (NULL,'北京',1),(NULL,'上海',1),(NULL,'广州',1),(NULL,'深圳',1);
-- 修改北京为北京市
-- 1.查询北京的version
SELECT VERSION FROM city WHERE NAME='北京';
-- 2.修改北京为北京市,版本号+1。并对比版本号
UPDATE city SET NAME='北京市',VERSION=VERSION+1 WHERE NAME='北京' AND VERSION=1;
Copier après la connexion

方式二:时间戳

和版本号方式基本一样,给数据表中添加一个列,名称无所谓,数据类型需要是timestamp

每次更新后都将最新时间插入到此列。

读取数据时,将时间读取出来,在执行更新的时候,比较时间。

如果相同则执行更新,如果不相同,说明此条数据已经发生了变化。

悲观锁和乐观锁使用前提:

当读取操作远多于写操作时,更新操作被加锁会阻塞所有读取操作,降低了系统的吞吐量。最后还要释放锁,锁是需要一些开销的,这时候可以选择乐观锁。

如果是读写比例差距不是非常大或者系统没有响应不及时,吞吐量瓶颈的问题,那就不要去使用乐观锁,它增加了复杂度,也带来了业务额外的风险。这时候可以选择悲观锁。

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 de ce site Web
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

Video Face Swap

Video Face Swap

Échangez les visages dans n'importe quelle vidéo sans effort grâce à notre outil d'échange de visage AI entièrement gratuit !

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Comment ouvrir phpmyadmin Comment ouvrir phpmyadmin Apr 10, 2025 pm 10:51 PM

Vous pouvez ouvrir PHPMYADMIN via les étapes suivantes: 1. Connectez-vous au panneau de configuration du site Web; 2. Trouvez et cliquez sur l'icône PHPMYADMIN; 3. Entrez les informations d'identification MySQL; 4. Cliquez sur "Connexion".

MySQL: une introduction à la base de données la plus populaire au monde MySQL: une introduction à la base de données la plus populaire au monde Apr 12, 2025 am 12:18 AM

MySQL est un système de gestion de la base de données relationnel open source, principalement utilisé pour stocker et récupérer les données rapidement et de manière fiable. Son principe de travail comprend les demandes des clients, la résolution de requête, l'exécution des requêtes et les résultats de retour. Des exemples d'utilisation comprennent la création de tables, l'insertion et la question des données et les fonctionnalités avancées telles que les opérations de jointure. Les erreurs communes impliquent la syntaxe SQL, les types de données et les autorisations, et les suggestions d'optimisation incluent l'utilisation d'index, les requêtes optimisées et la partition de tables.

Comment utiliser un seul fileté redis Comment utiliser un seul fileté redis Apr 10, 2025 pm 07:12 PM

Redis utilise une architecture filetée unique pour fournir des performances élevées, une simplicité et une cohérence. Il utilise le multiplexage d'E / S, les boucles d'événements, les E / S non bloquantes et la mémoire partagée pour améliorer la concurrence, mais avec des limites de limitations de concurrence, un point d'échec unique et inadapté aux charges de travail à forte intensité d'écriture.

Place de MySQL: bases de données et programmation Place de MySQL: bases de données et programmation Apr 13, 2025 am 12:18 AM

La position de MySQL dans les bases de données et la programmation est très importante. Il s'agit d'un système de gestion de base de données relationnel open source qui est largement utilisé dans divers scénarios d'application. 1) MySQL fournit des fonctions efficaces de stockage de données, d'organisation et de récupération, en prenant en charge les systèmes Web, mobiles et de niveau d'entreprise. 2) Il utilise une architecture client-serveur, prend en charge plusieurs moteurs de stockage et optimisation d'index. 3) Les usages de base incluent la création de tables et l'insertion de données, et les usages avancés impliquent des jointures multiples et des requêtes complexes. 4) Des questions fréquemment posées telles que les erreurs de syntaxe SQL et les problèmes de performances peuvent être déboguées via la commande Explication et le journal de requête lente. 5) Les méthodes d'optimisation des performances comprennent l'utilisation rationnelle des indices, la requête optimisée et l'utilisation des caches. Les meilleures pratiques incluent l'utilisation des transactions et des acteurs préparés

Pourquoi utiliser MySQL? Avantages et avantages Pourquoi utiliser MySQL? Avantages et avantages Apr 12, 2025 am 12:17 AM

MySQL est choisi pour ses performances, sa fiabilité, sa facilité d'utilisation et son soutien communautaire. 1.MySQL fournit des fonctions de stockage et de récupération de données efficaces, prenant en charge plusieurs types de données et opérations de requête avancées. 2. Adoptez l'architecture client-serveur et plusieurs moteurs de stockage pour prendre en charge l'optimisation des transactions et des requêtes. 3. Facile à utiliser, prend en charge une variété de systèmes d'exploitation et de langages de programmation. 4. Avoir un solide soutien communautaire et fournir des ressources et des solutions riches.

Comment se connecter à la base de données d'Apache Comment se connecter à la base de données d'Apache Apr 13, 2025 pm 01:03 PM

Apache se connecte à une base de données nécessite les étapes suivantes: Installez le pilote de base de données. Configurez le fichier web.xml pour créer un pool de connexion. Créez une source de données JDBC et spécifiez les paramètres de connexion. Utilisez l'API JDBC pour accéder à la base de données à partir du code Java, y compris l'obtention de connexions, la création d'instructions, les paramètres de liaison, l'exécution de requêtes ou de mises à jour et de traitement des résultats.

Comment démarrer MySQL par Docker Comment démarrer MySQL par Docker Apr 15, 2025 pm 12:09 PM

Le processus de démarrage de MySQL dans Docker se compose des étapes suivantes: Tirez l'image MySQL pour créer et démarrer le conteneur, définir le mot de passe de l'utilisateur racine et mapper la connexion de vérification du port Créez la base de données et l'utilisateur accorde toutes les autorisations sur la base de données

CentOS installe MySQL CentOS installe MySQL Apr 14, 2025 pm 08:09 PM

L'installation de MySQL sur CENTOS implique les étapes suivantes: Ajout de la source MySQL YUM appropriée. Exécutez la commande YUM Install MySQL-Server pour installer le serveur MySQL. Utilisez la commande mysql_secure_installation pour créer des paramètres de sécurité, tels que la définition du mot de passe de l'utilisateur racine. Personnalisez le fichier de configuration MySQL selon les besoins. Écoutez les paramètres MySQL et optimisez les bases de données pour les performances.

See all articles