22-01-2010, 12:48 PM
Quelques petites choses :
- D'abord, les LOCK ne sont pas compatibles avec les transactions ; lorsque tu executes un lock, MySQL fait un commit immédiatement et ferme toutes les transactions.
- Ensuite, LOCK IN SHARE MODE permet un verrouillage uniquement en écriture. Celle-ci fonctionne avec les transactions (en fait, c'est même son seul but vu que les SELECT sont atomiques, donc n'ont pas de temps d'execution).
La différence est le temps de verrouillage. Voici un exemple :
- D'abord, les LOCK ne sont pas compatibles avec les transactions ; lorsque tu executes un lock, MySQL fait un commit immédiatement et ferme toutes les transactions.
- Ensuite, LOCK IN SHARE MODE permet un verrouillage uniquement en écriture. Celle-ci fonctionne avec les transactions (en fait, c'est même son seul but vu que les SELECT sont atomiques, donc n'ont pas de temps d'execution).
La différence est le temps de verrouillage. Voici un exemple :
Code PHP :
<?php
// Début de la transaction
$pdo->beginTransaction();
// Select et verrouillage de la table
$pdo->query('SELECT id FROM table LOCK IN SHARE MODE');
// A partir de maintenant, aucune modification ne peut être faite
// sur la table "table". En revanche, tout le monde peut lire les informations
// sur cette même table.
// On execute différentes requêtes maintenant, tout ce qu'on veux
// On commit
$pdo->commit();
// A présent la table est déverrouillée et tout le monde peut la modifier
Ce n'est donc pas un verrouillage complet : la table n'est verrouillée qu'en écriture, et sera déverrouillée au commit.
Le LOCK par contre ne sera comme je l'ai dit pas compatible avec les transactions, et la table devra être déverrouillée au final.