Maison base de données tutoriel mysql Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

May 02, 2020 am 10:41 AM
mysql serrure partagée

Le mécanisme de verrouillage MySQL est divisé en verrous au niveau de la table et en verrous au niveau de la ligne. Cet article partagera avec vous mon partage et mon échange de verrous partagés et de verrous exclusifs dans les verrous au niveau de la ligne dans MySQL.

Le verrouillage partagé est également appelé verrouillage en lecture, ou verrouillage S en abrégé, le verrouillage partagé signifie que plusieurs transactions peuvent partager un verrou pour les mêmes données et qu'elles peuvent toutes accéder aux données, mais elles. ne peut que le lire et ne peut pas le modifier.

Le verrou exclusif est également appelé verrou en écriture, ou verrou X en abrégé, le verrou exclusif ne peut pas coexister avec d'autres verrous. Si une transaction acquiert un verrou exclusif sur une ligne de données, les autres transactions ne peuvent plus coexister. acquérir la ligne Les autres verrous incluent les verrous partagés et les verrous exclusifs, mais la transaction qui acquiert le verrou exclusif peut lire et modifier les données.

Tout le monde peut avoir une bonne compréhension des verrous partagés, c'est-à-dire que plusieurs transactions ne peuvent que lire les données mais pas modifier les données. Tout le monde peut avoir une compréhension différente des verrous exclusifs. J'ai fait une erreur au début, pensant cela. verrous exclusifs Une fois qu'une ligne de données est stockée, les autres transactions ne peuvent pas lire et modifier la ligne de données. Ce n'est pas le cas. Un verrou exclusif signifie qu'après qu'une transaction ajoute un verrou exclusif à une ligne de données, les autres transactions ne peuvent pas y ajouter d'autres verrous. L'instruction de modification des données par défaut du moteur mysql InnoDB, update, delete et insert ajoutera automatiquement des verrous exclusifs aux données impliquées. L'instruction select n'ajoutera aucun type de verrou par défaut. Si vous ajoutez un verrou exclusif, vous pouvez utiliser le. instruction select...for update Pour ajouter un verrou partagé, vous pouvez utiliser l'instruction select ... lock en mode partage. Par conséquent, les lignes de données avec des verrous exclusifs ne peuvent pas être modifiées dans d'autres transactions, et les données ne peuvent pas être interrogées pour la mise à jour et le verrouillage dans les verrous en mode partage, mais les données peuvent être interrogées directement via select...from..., car Ordinaire les requêtes n’ont aucun mécanisme de verrouillage.

Cela dit, jetons un coup d'œil à l'exemple simple suivant :

Nous avons les données de test suivantes

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Maintenant, nous effectuons une requête exclusive sur la ligne de données avec id=1. Ici, nous utiliserons commencer pour ouvrir la transaction, et vous ne me verrez pas fermer la transaction. C'est pour tester, car valider la transaction ou annuler. la transaction libérera le verrou.

Ouvrez une fenêtre de requête

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

interrogera une donnée. Ouvrez maintenant une autre fenêtre de requête et utilisez une requête exclusive et une requête de verrouillage partagé pour les mêmes données. Façons d'interroger

Requête exclusive

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Requête partagée

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

On voit que le verrou exclusif est activé La requête et la requête de verrouillage partagé seront dans un état de blocage, car les données avec id=1 ont été verrouillées avec un verrou exclusif et le blocage ici attend que le verrou exclusif soit libéré.

Et si on utilisait directement la requête suivante ?

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

On voit que les données peuvent être interrogées.

Regardons à nouveau une transaction qui acquiert un verrou partagé. Dans d'autres requêtes, nous ne pouvons ajouter que des verrous partagés ou non.

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Nous voyons que nous pouvons interroger les données, mais nous ne pouvons pas les trouver si nous ajoutons un verrou exclusif, car les verrous exclusifs et partagés ne peuvent pas exister sur les mêmes données.

Enfin, nous vérifions le problème de l'ajout automatique de verrous exclusifs pour mettre à jour, supprimer et insérer des instructions dans le moteur mysql InnoDb mentionné ci-dessus

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

À ce stade. À ce moment-là, la requête partagée est en blocage, attendant la libération du verrou exclusif, mais les données peuvent être trouvées à l'aide de requêtes ordinaires, car le mécanisme de verrouillage ne s'exclut pas mutuellement avec le verrou exclusif, mais les données trouvées sont les anciennes données d'avant. les données sont modifiées.

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Ensuite, nous soumettons les données, libérons le verrou exclusif et examinons les données modifiées. À ce moment, une requête exclusive, une requête partagée et une requête ordinaire peuvent être utilisées, car la requête exclusive. les données de la ligne sont publiées après la soumission de la transaction. Verrouillage exclusif, seules les requêtes ordinaires sont affichées ci-dessous, les autres étudiants peuvent vérifier par eux-mêmes.

Explication détaillée des verrous partagés et des verrous exclusifs dans MySQL

Vous pouvez voir que le résultat est comme prévu.

Tutoriel recommandé : "Tutoriel MySQL"

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

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Article chaud

Repo: Comment relancer ses coéquipiers
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Combien de temps faut-il pour battre Split Fiction?
3 Il y a quelques semaines By DDD
R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
1 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
Hello Kitty Island Adventure: Comment obtenir des graines géantes
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Tags d'article chaud

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)

Compétences de traitement de structures de données volumineuses de PHP Compétences de traitement de structures de données volumineuses de PHP May 08, 2024 am 10:24 AM

Compétences de traitement de structures de données volumineuses de PHP

Comment optimiser les performances des requêtes MySQL en PHP ? Comment optimiser les performances des requêtes MySQL en PHP ? Jun 03, 2024 pm 08:11 PM

Comment optimiser les performances des requêtes MySQL en PHP ?

Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Comment utiliser la sauvegarde et la restauration MySQL en PHP ? Jun 03, 2024 pm 12:19 PM

Comment utiliser la sauvegarde et la restauration MySQL en PHP ?

Comment insérer des données dans une table MySQL en utilisant PHP ? Comment insérer des données dans une table MySQL en utilisant PHP ? Jun 02, 2024 pm 02:26 PM

Comment insérer des données dans une table MySQL en utilisant PHP ?

Quels sont les scénarios d'application des types d'énumération Java dans les bases de données ? Quels sont les scénarios d'application des types d'énumération Java dans les bases de données ? May 05, 2024 am 09:06 AM

Quels sont les scénarios d'application des types d'énumération Java dans les bases de données ?

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4 Dec 09, 2024 am 11:42 AM

Comment corriger les erreurs mysql_native_password non chargé sur MySQL 8.4

Comment utiliser les procédures stockées MySQL en PHP ? Comment utiliser les procédures stockées MySQL en PHP ? Jun 02, 2024 pm 02:13 PM

Comment utiliser les procédures stockées MySQL en PHP ?

Stratégies d'optimisation des performances pour la pagination des tableaux PHP Stratégies d'optimisation des performances pour la pagination des tableaux PHP May 02, 2024 am 09:27 AM

Stratégies d'optimisation des performances pour la pagination des tableaux PHP

See all articles