Bonjour à tous.

Je lis sur la doc officielle de MySQL ceci :

If a FOREIGN KEY constraint is defined on a table, any insert, update, or delete that requires the constraint condition to be checked sets shared record-level locks on the records that it looks at to check the constraint. InnoDB also sets these locks in the case where the constraint fails.
Supposons que j'ai une table T_1 qui référence au moyen d'une FK une table T_2.

Si je comprend bien la note, si je fais un update sur la table T_1, un shared-lock doit être posé sur la ligne référencée dans la table T_2.

Pourtant, dans mon cas, si j'agis comme ceci :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Start Transaction
UPDATE T_1 SET T_ATTR = 'toto' WHERE T2_ID = 1;
Avec T2_ID qui représente la FK de T_1 vers T_2.
Je n'ai pas encore commité cette 1ère transaction, et j'en commence une autre :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
 
Start Transaction
UPDATE T_2 SET T_ATTR = 'tutu' WHERE T2_ID = 1;
Là, je ne suis pas en attente, et la requête passe !!

Est-ce normal? Ai-je raté un truc dans l'explication???

Je précise MySQL 5.0 avec des tables InnoDB, Transaction Level par défaut (REPEATBLE_READ sous InnoDB il me semble).

Bref, je suis un peu dans le flou.
J'ai du rater qq chose, mais pour le moment je ne vois pas quoi, si des personnes ont des remarques ou des indications, elles seront les bienvenues