Salut,
MySQL 5.1
Soit trois consoles mysql "A", "B" et "C".
Dans la console "A" :
Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
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 sql : Sélectionner tout - Visualiser dans une fenêtre à part
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" :
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 set autocommit=0; select col from lock_table where col='1' for update;
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.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 commit; unlock tables;
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 ?
Partager