PRATIQUE OUTILS 
Gérer le verrouillage des tables dans MySQL
 
Une commande du SGBD Open Source permet de lancer plusieurs requêtes simultanément, en verrouillant la table visée. (24/01/2005)
  Forum

Réagissez dans les forums de JDN Développeurs

Une base de données n'est que rarement personnelle : dans la majeure partie des cas, plusieurs dizaines de personnes peuvent y accéder, lire, ajouter et modifier des données, et plus généralement se croire seules face à la base. Il n'en est évidemment rien, et pour cependant présenter à l'utilisateur un visage d'accessibilité, les SGBD modernes utilisent un mécanisme de verrouillage.

Le verrouillage consiste à bloquer l'accès à une table, une page ou une ligne (selon le type de table) pour toutes les requêtes, le temps que la requête en cours soit prise en compte. Cela peut créer une véritable queue de requête, mais avec les vitesses actuelles, cette attente est le plus souvent invisible pour l'utilisateur final ; la base de données prend tout en charge, et s'assure qu'elle tient le coup.

Ce système comporte un inconvénient : il peut être impossible de lancer directement plusieurs requêtes INSERT ou SELECT à la suite sur une base, sans prendre le risque de voir une requête inattendue prendre le pas. Dans les cas où cette suite de requêtes est néanmoins nécessaire, MySQL, comme d'autres SGBD, propose à l'utilisateur de prendre en main le verrouillage/déverrouillage.

Pour ce faire, il faut passer par une table intermédiaire et temporaire, dans laquelle on insère les données nécessaires. Ensuite, faire une requête comme suit :

LOCK TABLES table_definitive WRITE, table_temporaire WRITE;
INSERT INTO table_definitve SELECT * FROM table_temporaire;
UNLOCK TABLES;


LOCK TABLES nous permet, donc, de verrouiller les tables voulues (ici en écriture) le temps que le transfert se fasse. UNLOCK TABLES les libère : tous les utilisateurs ont à nouveau accès aux données modifiées...

 
Xavier Borderie, JDN Développeurs
 
 
Accueil | Haut de page