Syntaxe de SAVEPOINT et ROLLBACK TO SAVEPOINT <<< |
Syntaxe de LOCK TABLES/UNLOCK TABLES | Syntaxe de SET TRANSACTION >>> |
14.4 Commandes relatives aux verrous et aux transactions 14 Syntaxe des commandes SQL Manuel de Référence MySQL 4.1 : Version Française . Syntaxes de START TRANSACTION , COMMIT et ROLLBACK . Commandes qui ne peuvent pas être annulées . Commandes qui peuvent causer une validation implicite . Syntaxe de SAVEPOINT et ROLLBACK TO SAVEPOINT ->Syntaxe de LOCK TABLES/UNLOCK TABLES . Syntaxe de SET TRANSACTION |
14.4.5 Syntaxe de LOCK TABLES/UNLOCK TABLES
L'utilisation de LOCK TABLES dans MySQL 4.0.2 nécessite le privilège LOCK TABLES global et un privilège de SELECT sur les tables impliquées. Dans MySQL 3.23, il faut les privilèges SELECT , INSERT , DELETE et UPDATE sur les tables. Les principales raisons d'utiliser LOCK TABLES sont l'émulation de transactions ou l'accélération des processus de modification de tables. Cela sera détaillé plus loin.Si un thread obtient un verrouillage READ sur une table, ce thread (et tous les autres threads) peuvent uniquement accéder a cette table en lecture. Si un thread obtient un verrouillage WRITE sur une table, alors seul le thread qui a posé le verrou peut lire ou écrire sur cette table. Tous les autres threads sont bloqués. La différence entre READ LOCAL et READ est que READ LOCAL autorise des requêtes INSERT non-conflictuelles à être exécutées alors que le verrou est posé. Ceci ne peut cependant pas être utilisé si vous souhaitez modifier les fichiers de la base de données en dehors de MySQL pendant que le verrou est posé.Quand vous utilisez LOCK TABLES , vous devez verrouiller toutes les tables que vous allez utiliser, et vous devez utiliser les mêmes alias sur ce que vous utiliserez dans vos requêtes ! Si vous utilisez une table a plusieurs reprises dans une requête (avec des alias), vous devez verrouiller chacun des alias ! Si vos requêtes utilisent un alias pour une table, alors vous devez verrouiller la table avec l'alias. Le verrouillage ne fonctionnera pas si vous verrouillez la table sans spécifier l'alias :
Si vous utilisez un verrou LOW_PRIORITY WRITE pour une table, cela signifie seulement que MySQL attendra, pour poser ce verrou, qu'aucun autre thread ne réclame de verrou READ . Quand le thread aura le verrou WRITE et qu'il attendra que les verrous soient posés sur les autres tables de la liste, tous les autres threads attendront que le verrou WRITE soit libéré. Si cela devient un problème grave pour votre application, il est conseillé de convertir des tables en tables supportant les transactions. Vous pouvez terminer un thread attendant un verrouillage de table en toute sécurité avec KILL . Syntaxe de KILL .Il est déconseillé de verrouiller des tables utilisées avec INSERT DELAYED , car, dans ce cas, la requête INSERT est exécutée dans un autre thread. Normalement, vous n'avez pas besoin de verrouiller les tables puisque chaque requête UPDATE est atomique : aucun autre thread ne peut interférer avec une autre requête active. Il existe cependant quelques cas où vous aurez besoin de verrouiller les tables :
Il est aussi possible de résoudre de nombreux cas en utilisant un verrou utilisateur, avec les fonctions GET_LOCK() et RELEASE_LOCK() . Ces verrous sont stockés dans une table de hashage dans le serveur et utilisent les fonctions pthread_mutex_lock() et pthread_mutex_unlock() pour plus de vitesse. Fonctions diverses . Voir Comment MySQL verrouille les tables pour plus de détails.Il est possible de verrouiller tous les tables de toutes les bases avec la commande FLUSH TABLES WITH READ LOCK . Syntaxe de FLUSH . C'est une méthode très pratique pour effectuer des sauvegardes si vous utilisez un système de fichiers qui, comme Veritas, permet de créer des instantanés.Note : LOCK TABLES ne fonctionne pas avec les transactions et validera automatiquement toutes les transactions actives avant de poser verrouiller la table. Problèmes avec ALTER TABLE . . |
<< | Syntaxe de LOCK TABLES/UNLOCK TABLES | >> |
Syntaxe de SAVEPOINT et ROLLBACK TO SAVEPOINT | Commandes relatives aux verrous et aux transactions | Syntaxe de SET TRANSACTION |