Un exemple de lecture cohérente avec InnoDB
<<<
Les verrous posés par différentes requêtes SQL avec InnoDB Quand est-ce que MySQL valide ou annule implicitement une transaction?
>>>

16.11 InnoDB Transaction Model and Locking
16 Tables InnoDB
 Manuel de Référence MySQL 4.1 : Version Française

InnoDB et AUTOCOMMIT
InnoDB et SET ... TRANSACTION ISOLATION LEVEL ...
Lecture cohérente non-bloquante
Locking Reads SELECT ... FOR UPDATE and SELECT ... LOCK IN SHARE MODE
Verrou de clé suivante : éviter le problème des lignes fantômes
Un exemple de lecture cohérente avec InnoDB
->Les verrous posés par différentes requêtes SQL avec InnoDB
Quand est-ce que MySQL valide ou annule implicitement une transaction?
Détection des blocages et annulation
Comment gérer les blocages de verrous?

16.11.7 Les verrous posés par différentes requêtes SQL avec InnoDB

  • SELECT ... FROM ... : ceci est une lecture cohérente, qui lit un bilan de la base, et ne pose aucun verrou.
  • SELECT ... FROM ... LOCK IN SHARE MODE : pose un verrou partagé sur la prochaine clé sur tous les index que la lecture rencontre.
  • SELECT ... FROM ... FOR UPDATE : pose un verrou exclusif sur la prochaine clé sur tous les index que la lecture rencontre.
  • INSERT INTO ... VALUES (...) : pose un verrou exclusif sur la ligne insérée. Notez que ce verrou n'est pas un verrou de clé, et il n'empêche pas les autres utilisateurs d'insérer des lignes. Si une erreur de clé double apparaît, un verrou sera posé partagé sera posé sur la ligne doublon.
  • INSERT INTO T SELECT ... FROM S WHERE ... : pose un verrou exclusif sur chaque ligne inséré dans T . Effectue la recherche sur S sous la forme d'une lecture cohérente, mais pose un verrou partagé sur l'index de prochaine clé de S si MySQL a activé le log. InnoDB doit poser un verrou dans cette dernière situation, car en cas d'exécution des instructions dans une phase de restauration, toutes les requêtes doivent être exécutées dans le même ordre.
  • CREATE TABLE ... SELECT ... effectue une commande SELECT sous la forme d'une lecture cohérente, ou avec des verrous partagés, comme précédemment.
  • REPLACE est similaire à une insertion, si il n'y a pas de collision sur la clé unique. Sinon, une verrou exclusif sur l'index de prochaine clé est posé sur la ligne qui sera modifiée.
  • UPDATE ... SET ... WHERE ... : pose un verrou exclusif sur l'index de prochaine clé, à chaque ligne que la recherche trouve.
  • DELETE FROM ... WHERE ... : pose un verrou exclusif sur l'index de prochaine clé à chaque ligne que la recherche trouve.
  • Si la contrainte de FOREIGN KEY est définie sur une table, toute insertion, modification ou effacement qui requiert la vérification de la contrainte va poser un verrou de ligne sur la ligne dont il doit vérifier la contrainte. De plus, dans certains cas où la contrainte échoue, InnoDB pose ces verrous.
  • LOCK TABLES ... : pose un verrou de table. L'implémentation de la couche MySQL pose ce verrou. La détection automatique des blocages de InnoDB ne peut détecter les blocages lorsque de tels verrous sont posés. Voyez la section suivante. De plus, comme MySQL ne connaît pas le verrouillage de lignes, il est possible que vous posiez un verrou sur une table où un autre utilisateur a déjà posé un verrou. Mais cela ne pose pas de problème quant à l'intégrité de la requête. Restrictions sur les tables InnoDB .

<< Les verrous posés par différentes requêtes SQL avec InnoDB >>
Un exemple de lecture cohérente avec InnoDB InnoDB Transaction Model and Locking Quand est-ce que MySQL valide ou annule implicitement une transaction?