2 lock tables + 1 for update = mysql dans les choux
Salut,
MySQL 5.1
Soit trois consoles mysql "A", "B" et "C".
Dans la console "A" :
Code:
1 2 3 4 5
| set autocommit=0;
create table lock_table (col int);
insert into lock_table values (1);
commit;
lock tables lock_table write; |
Je désactive l'autocommit.
Je créé une table lock_table avec une colonne col de type int.
J'insère une valeur dedans.
Je commit l'insertion.
Je lock la table.
Dans la console "B" :
Code:
1 2
| set autocommit=0;
lock tables lock_table write; |
Je réclame aussi le lock de la table. La console ne me rend pas la main et c'est normal vu que la console "A" a déjà un lock sur la table. Il faut attendre que console "A" unlock.
Dans la console "C" :
Code:
1 2
| set autocommit=0;
select col from lock_table where col='1' for update; |
Je fait un select for update de la ligne de la table. Là aussi la table est locké par la console "A". La console ne rend donc pas la main.
Retour dans la console "A" pour ajouter :
D'après la documentation, il faut faire un commit pour faire un release du lock InnoDB puis un unlock tables pour releaser le lock MySQL.
Seulement voilà...
Ca ne délock rien !
Console "B" et console "C" attende encore... Quelque chose.
Par contre, si je fait le commit dans "A" avant de taper des trucs dans "B" et "C", ça "fonctionne".
Quelqu'un a une explication censé et/ou une bonne manière de faire ?