J'ai un problème étrange (au moins pour moi :)) avec le verrouillage de MySQL.Mysql SELECT FOR UPDATE - problème étrange
J'ai une table:
create table `test` (
`id` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=latin1
Avec ces données:
+ ---- +
| id |
+ ---- +
| 3 |
| 4 |
| 5 |
| 6 |
| 7 |
| 8 |
| 10 |
| 11 |
| 12 |
+ ---- +
Maintenant, j'ai 2 clients avec ces commandes exécutées au début:
set autocommit = 0;
Définir le niveau d'isolement de transaction de session sérialisable;
début;
Maintenant la partie la plus intéressante. Le premier client exécute cette requête: (fait l'intention d'insérer une ligne avec un identifiant égal à 9)
SELECT * à partir du test où id = 9 FOR UPDATE;
ensemble vide (0.00 sec)
Ensuite, le second client fait la même chose:
SELECT * de test où id = 9 FOR UPDATE;
ensemble vide (0.00 sec)
Ma question est: Pourquoi le second client ne bloque pas? Un verrou d'espace exclusif doit avoir été défini par la première requête car FOR UPDATE a été utilisé et le second client doit bloquer.
Si je me trompe, quelqu'un pourrait-il me dire comment le faire correctement?
La version MySql J'utilise est: 5.1.37-1ubuntu5.1
Il ne bloque pas parce que vous avez verrouillé avec succès ** zéro lignes **. – Pacerier