Maison > Article > base de données > Quels sont les verrous de la base de données MySQL ?
Les verrous dans la base de données MySQL sont : 1. Le verrou partagé, qui signifie la lecture des données ; 2. Le verrou exclusif, qui signifie l'écriture des données ; 3. Le verrou de ligne, qui verrouille une ligne d'enregistrements et n'affecte que Un enregistrement ; 4. Verrouillage d'intention, afin de révéler le type de verrouillage qui sera demandé pour la ligne suivante dans une transaction.
Verrouillage de la base de données MySQL
1. lock)
Le verrouillage partagé (S) signifie la lecture de données. Par conséquent, plusieurs transactions peuvent ajouter simultanément des verrous partagés à un objet.
Instruction SQL qui génère un verrou partagé :
select * from ad_plan lock in share mode;
2 Verrouillage exclusif (Verrou exclusif, également appelé verrouillage X)
Le verrouillage exclusif signifie que le data Effectuer des opérations d'écriture. Si une transaction ajoute un verrou exclusif à un objet, les autres transactions ne peuvent pas y ajouter de verrous supplémentaires.
Instruction SQL qui génère un verrou exclusif :
select * from ad_plan for update;
3. Row Lock (Row Lock)
Verrouille une ligne d'enregistrements, affectant un seul enregistrement.
est généralement utilisé dans les instructions DML, telles que INSERT, UPDATE, DELETE, etc.
Le verrouillage des lignes InnoDB est obtenu en verrouillant les entrées d'index sur l'index. Ceci est différent de MySQL et Oracle, qui est obtenu en verrouillant les lignes de données correspondantes dans le bloc de données.
La fonctionnalité d'implémentation du verrouillage de ligne d'InnoDB signifie qu'InnoDB utilise des verrous au niveau des lignes uniquement lorsque les données sont récupérées via des conditions d'index. Sinon, InnoDB utilisera des verrous de table !
4. Verrouillage d'intention
Le verrouillage d'intention est un verrou au niveau de la table. Son objectif de conception est principalement de révéler le type de verrouillage qui sera demandé pour la rangée 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'avant d'ajouter un verrou partagé à une ligne de données, le verrou IS de la la table doit d'abord être obtenue ;
Verrou exclusif d'intention (IX) : similaire à ce qui précède, cela signifie que la transaction se prépare à ajouter un verrou exclusif à la ligne de données, indiquant que la transaction doit d'abord obtenir le verrou IX du table avant d’ajouter un verrou exclusif à une ligne de données.
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 instructions SELECT générales, InnoDB n'ajoutera aucun verrou et les transactions peuvent explicitement ajouter des verrous partagés ou des verrous exclusifs via les instructions suivantes.
Verrouillage partagé : SELECT … VERROUILLER EN MODE PARTAGE ;
Verrouillage exclusif : SELECT … POUR MISE À JOUR ;
Niveau de verrouillage
Réparti selon le niveau ou la densité des verrous, MySQL dispose de trois niveaux de verrouillage : niveau page, niveau table et niveau ligne.
(1) Verrous au niveau de la table
Faible surcharge, verrouillage rapide ; pas de blocage ; grande granularité de verrouillage, probabilité la plus élevée de conflits de verrouillage, concurrence élevée la plus faible.
(2) Les verrous au niveau des lignes
sont coûteux et lents à verrouiller ; le plus bas, et la concurrence est également faible.
(3) Verrouillage de page
Le coût et le temps de verrouillage sont limités entre les verrous de table et les verrous de ligne ; la granularité du verrouillage est limitée entre les verrous de table et de ligne ; locks Entre les locks de lignes, la concurrence est moyenne.
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!