Comment savoir qui verrouille une table dans MySQL

Comment savoir qui verrouille une table dans MySQL
Un verrou MySQL fait référence à un indicateur de verrouillage connecté à une table. L'utilisation principale des verrous MySQL est en séances utilisateur pour empêcher d'autres séances d'utilisateur d'accéder à la table pendant une session active. Une session MySQL spécifique ne peut accéder qu'à ses serrures et non aux serrures associées à d'autres clients.

Une fois qu'une table est verrouillée dans une session particulière, d'autres sessions ne peuvent pas lire ou écrire à la table à moins que le verrou de la session ne soit publié. Par conséquent, toutes les autres sessions sont en mode d'attente jusqu'à ce que le verrou est libéré.

Ce court guide vous montrera comment afficher les verrous disponibles à l'aide de la commande Show Process List.

Comment verrouiller une table

Pour acquérir un état de verrouillage sur une table spécifique, vous pouvez utiliser l'instruction Tables de verrouillage. La syntaxe générale pour les tables de verrouillage est:

mysql> tables de verrouillage tb_name [lock_type]

Dans le type de verrouillage, vous pouvez spécifier le verrouillage de lecture ou de lecture. L'exemple ci-dessous définit le verrouillage d'écriture sur la table d'acteur.

Tables de verrouillage Sakila.acteur lu;

Une fois que vous aurez l'ensemble de verrouillage, toutes les autres sessions ne mettront pas à jour les données stockées dans le tableau.

Par exemple, l'instruction suivante échouera à moins que le tableau ne soit déverrouillé.

Insérer dans Sakila.acteur (first_name, last_name, last_update) valeurs ('hello', 'world', current_date ());

MySQL vous donnera une erreur de lecture comme:

Erreur 1099 (HY000): le tableau «acteur» était verrouillé avec un verrouillage de lecture et ne peut pas être mis à jour

Comment déverrouiller une table

Pour déverrouiller une table, utilisez la requête des tables de déverrouillage comme:

MySQL> Déverrouiller les tables;

Montrer les tables verrouillées

Par défaut, il n'y a aucun moyen définitif de demander à afficher pour la table verrouillée comme: (afficher des tables verrouillées;).

Cependant, nous pouvons utiliser une commande ProcessList pour afficher les tables verrouillées et les utilisateurs.

Utilisez la commande:

Show ProcessList;

Cela videra les informations ainsi que les requêtes en attente de verrouillage.

L'exemple ci-dessus montre l'utilisateur racine verrouillant le tableau dans la table d'acteur.

Conclusion

Ce court tutoriel vous a montré comment verrouiller et déverrouiller les tables et afficher les utilisateurs qui ont une table verrouillée dans une base de données.