|
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...
|