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 :

2 lock tables + 1 for update = mysql dans les choux


Sujet :

Requêtes MySQL

  1. #1
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 665
    Points
    665
    Par défaut 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 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" :
    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;
    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 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    commit;
    unlock tables;
    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 ?

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Juin 2011
    Messages
    445
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juin 2011
    Messages : 445
    Points : 622
    Points
    622
    Par défaut
    Bonjour,

    J'ai fait ton test chez moi et ça a fonctionné.

    Mais j'ai fait le test avec MariaDB 5.5 et 3 connexions WorkBench

  3. #3
    Membre éclairé Avatar de rt15
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Octobre 2005
    Messages
    262
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Octobre 2005
    Messages : 262
    Points : 665
    Points
    665
    Par défaut
    A ok merci.
    Ça a peut être été corrigé alors. Faudrait que je fasse l'essai sur une 5.5 aussi.
    Mais bon visiblement il y a surtout des 5.1 dans ma boîte.

Discussions similaires

  1. [Débutant] afficher une table d'une BDD MySql dans un combobox multicolonnes
    Par vbcasio dans le forum VB.NET
    Réponses: 4
    Dernier message: 24/06/2011, 11h32
  2. Réponses: 2
    Dernier message: 26/04/2011, 09h58
  3. JDBC Locking row : SELECT FOR UPDATE
    Par relbeghdadi dans le forum JDBC
    Réponses: 3
    Dernier message: 14/01/2011, 11h35
  4. Réponses: 1
    Dernier message: 24/09/2010, 19h01
  5. Réponses: 3
    Dernier message: 07/03/2008, 14h31

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