IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

[MySQL] InnoDB FK & Vérouillage


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut [MySQL] InnoDB FK & Vérouillage
    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
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  2. #2
    Membre confirmé Avatar de nounetmasque
    Inscrit en
    Janvier 2003
    Messages
    494
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 494
    Points : 570
    Points
    570
    Par défaut
    Personnellement je dirais qu'un verrou est posé uniquement si tu modifies la clé étrangère elle même et pas un champ de la ligne comme cité dans ton exemple.
    "Dieu reste muet, si seulement nous pouvions convaincre l'être humain d'en faire autant."

  3. #3
    Expert éminent
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 903
    Points : 6 027
    Points
    6 027
    Par défaut
    Citation Envoyé par nounetmasque Voir le message
    Personnellement je dirais qu'un verrou est posé uniquement si tu modifies la clé étrangère elle même et pas un champ de la ligne comme cité dans ton exemple.
    +1

    Ton update T1 ne nécessite a priori pas la vérification de la contrainte...
    "Il n'y a pas de bonnes réponses à une mauvaise question." (M. Godet)
    -----------------------
    Pensez à cloturer votre sujet - Aucune réponse aux sollicitations techniques par MP
    Usus magister est optimus

  4. #4
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Merci pour vos réponses.

    Effectivement, si l'update ne nécessite pas réellement de vérifier la contrainte... Je pense que la doc m'a induit en erreur...

    Du coup si je fais un update sur T_1 en modifiant la valeur du champ qui référence T_2, là pour le coup, la ligne devrait être lockée.

    Je vais vérifier ça sur le champ
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

  5. #5
    Membre averti Avatar de GyZmoO
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    428
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Février 2006
    Messages : 428
    Points : 301
    Points
    301
    Par défaut
    Test concluant.

    Merci
    define: Programmeur : Celui qui résout un problème que vous n'aviez pas, d'une façon que vous ne comprenez pas.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Partition de table MySQL / Innodb
    Par nico1214 dans le forum Requêtes
    Réponses: 2
    Dernier message: 31/05/2009, 17h14
  2. Deadlock mysql InnoDB ? Pourquoi!
    Par HerQuLe dans le forum MySQL
    Réponses: 5
    Dernier message: 30/04/2009, 18h14
  3. Réponses: 2
    Dernier message: 14/04/2008, 10h24
  4. Impossible de démarrer Mysql - InnoDB - SCSI
    Par thibotus01 dans le forum Installation
    Réponses: 1
    Dernier message: 07/03/2008, 12h05
  5. Pb restauration base MySQL innodb via un dump
    Par Y.Guillermin dans le forum Administration
    Réponses: 4
    Dernier message: 27/09/2006, 15h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo