Maison  >  Article  >  base de données  >  Partager l'utilisation des verrous partagés et des verrous exclusifs dans MySQL

Partager l'utilisation des verrous partagés et des verrous exclusifs dans MySQL

零下一度
零下一度original
2017-04-21 15:56:393375parcourir


Parmi les verrous au niveau des lignes, les verrous au niveau des tables et les verrous au niveau des pages dans MySQL, nous avons introduit que les verrous au niveau des lignes sont les verrous les plus granulaires dans MySQL. réduire les conflits dans les opérations de base de données. Les verrous au niveau des lignes sont divisés en verrous partagés et verrous exclusifs. Cet article présentera en détail les concepts, l'utilisation et les précautions des verrous partagés et des verrous exclusifs.

Share Lock

Le verrou partagé, également connu sous le nom de verrou de lecture, est un verrou créé par une opération de lecture. D'autres utilisateurs peuvent lire les données simultanément, mais aucune transaction ne peut modifier les données (acquérir un verrou exclusif sur les données) tant que tous les verrous partagés n'ont pas été libérés.

Si la transaction T ajoute un verrou partagé aux données A, les autres transactions ne peuvent ajouter que des verrous partagés à A et ne peuvent pas ajouter de verrous exclusifs. Les transactions bénéficiant de verrous partagés peuvent uniquement lire des données et ne peuvent pas les modifier.

Utilisation

SELECT ... LOCK IN SHARE MODE;

Ajouter LOCK IN SHARE MODE après l'instruction de requête, MySQL ajoutera le partage à chaque ligne du résultat de la requête Lock, lorsqu'aucun autre thread n'utilise un verrou exclusif sur une ligne du jeu de résultats de la requête, il peut demander avec succès un verrou partagé, sinon il sera bloqué. D'autres threads peuvent également lire des tables à l'aide de verrous partagés, et ces threads lisent la même version des données.

Verrouillage exclusif

Le verrouillage exclusif est également appelé verrouillage en écriture et verrouillage exclusif Si la transaction T ajoute un verrouillage exclusif aux données A, les autres transactions ne peuvent plus y accéder A. Ajoutez n’importe quel type de blocus. Les transactions bénéficiant de verrous exclusifs peuvent à la fois lire et modifier des données.

Utilisation

SELECT ... FOR UPDATE;

Ajouter FOR UPDATE après l'instruction de requête, MySQL ajoutera un verrou exclusif à chaque ligne du résultat de la requête, lorsqu'aucun autre thread n'utilise un verrou exclusif sur une ligne du jeu de résultats de la requête, il peut demander avec succès un verrou exclusif, sinon il sera bloqué.

Verrouillage d'intention

Le verrouillage d'intention est un verrou au niveau de la table, qui est principalement conçu pour révéler le type de verrou qui sera demandé pour la ligne suivante dans une transaction. Deux verrous de table dans InnoDB :

  • Intention Shared Lock (IS) : indique que la transaction se prépare à ajouter un verrou partagé à la ligne de données, ce qui signifie qu'une ligne de données doit être obtenue avant d'ajouter un verrou partagé. IS verrou de la table ;

  • intention de verrouillage exclusif (IX) : similaire à ce qui précède, indiquant que la transaction se prépare à ajouter un verrou exclusif à la ligne de données, indiquant que la transaction ajoute un verrou exclusif à une ligne de données avant. Le verrou IX de la table doit être obtenu en premier.

Les verrous d'intention sont automatiquement ajoutés par InnoDB et ne nécessitent pas l'intervention de l'utilisateur.

Pour INSERT, UPDATE et DELETE, InnoDB ajoutera automatiquement des verrous exclusifs aux données impliquées ; pour les déclarations générales SELECT, InnoDB n'ajoutera aucun verrou et les transactions pourront être effectuées via les instructions suivantes ajoutent explicitement des verrous partagés ou des verrous exclusifs.

Verrouillage partagé : SELECT ... LOCK IN SHARE MODE;

Verrouillage exclusif : SELECT ... FOR UPDATE;

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