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

SQL Procédural MySQL Discussion :

[MySQL5.5] Transaction contenant une/des procédures stockées


Sujet :

SQL Procédural MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Par défaut [MySQL5.5] Transaction contenant une/des procédures stockées
    Bonjour,

    J'aimerais savoir s'il est possible d'appeler des procédure à l’intérieur d'une transaction comme ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    START TRANSACTION; 
     
    call maTransaction();
     
    COMMIT;

    Il me semble qu'à la sortie de la transaction un commit est réalisé même si après le "start transaction" je fais un "set autocommit = 0"

    D'après vos expériences, ce cas d'utilisation est-il possible et si oui recommandé ?

    Merci d'avance.

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    127
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 127
    Par défaut
    Bonjour,

    J'aimerais savoir s'il est possible d'appeler des procédure à l’intérieur d'une transaction comme ci dessous :
    La réponse est "OUI".
    Il me semble qu'à la sortie de la transaction un commit est réalisé même si après le "start transaction" je fais un "set autocommit = 0"
    Tu ne donnes pas l'exemple qui te fait arriver à cette conclusion mais je pense que tes tests t'ont induit en erreur.

    Le mélange de "set autocommit" et START TRANSACTION est confusionnel
    En effet, si on fait un set autocommit=0, cela ouvre une transaction, et si ensuite on fait set autocommit=1, la transaction est commitée et fermée.

    A mon avis, évite de mélanger les deux.
    Voici quelques exemples pour bien comprendre (enfin j'espère)
    (ma proc inserenom() insère une ligne dans une table.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    -- la transaction est commitée 
    START TRANSACTION;
    call test.inserenom('titi01in');
    COMMIT;
    ROLLBACK; -- pour vérifier on peut faire ROLLBACK qui est sans effet
     
     -- ou 
    SET autocommit= 0;
    call test.inserenom('titi02in');
    SET autocommit= 1; -- (ou COMMIT)
    ROLLBACK; -- pour vérifier on peut faire ROLLBACK qui est sans effet
     
     
     
    -- la transaction est rejetée
    START TRANSACTION;
    SET autocommit= 0;
    call test.inserenom('titi03out');
    ROLLBACK;
    COMMIT; -- pour vérifier on peut faire COMMIT qui est sans effet
    -- ou 
    SET autocommit= 0;
    call test.inserenom('titi04out');
    ROLLBACK;
    COMMIT; -- pour vérifier on peut faire COMMIT qui est sans effet
     
     
    -- mais aussi ligne rejetée (le set autocommit = 0 est sans effet:
    START TRANSACTION;
    SET autocommit= 0;
    call test.inserenom('titi05out');
    ROLLBACK;
    COMMIT; -- pour vérifier on peut faire COMMIT qui est sans effet
     
    -- Mais ci dessous la ligne est insérée quand même
    -- car SET autocommit= 1; ferme la transaction.
    START TRANSACTION;
    SET autocommit= 1;
    call test.inserenom('titi05in');
    ROLLBACK;
    ROLLBACK; -- pour vérifier on peut faire un deuxième ROLLBACK qui est sans effet

  3. #3
    Membre confirmé
    Profil pro
    Étudiant
    Inscrit en
    Mai 2009
    Messages
    102
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2009
    Messages : 102
    Par défaut
    Alors j'ai effectivement placé une petite coquille dans mon code car je voulais plutôt parler d'un appel de procédure stockée dans une transaction.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    START TRANSACTION
     
    call maProcedureStockee();
     
    COMMIT
    Lors de mes tests de ce principe j'avais lancé une transaction sans faire le COMMIT et j'avais ouvert une deuxieme session sur le server MySQL pour verifier que l'acces à la donnée était bien bloqué. J'avais fait un simple "SELECT" qui attaquait le champ en question.
    Ce que j'avais oublié c t de placer mon select dans une transaction. et la j'ai bien mon select qui est mis en attente jusqu'au commit de la premiere session.

    Merci semaphore1984 pour tes exemples ça m'a appris des choses ;p

    Maintenant j'ai des questions sur le clustering de servers de base de données avec des failover automatiques ... MySQL ne semble pas proposer d'option autre que la replication (pas de failover auto) et le vluser (pas forcément très pratique à l'utilsation et à mettre en place. Mais ceci est un autre sujet ...

    Bon week end

Discussions similaires

  1. Réponses: 11
    Dernier message: 15/02/2011, 00h10
  2. [MySQL] Charger un fichier SQL contenant des procédures stockées
    Par Shiva dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 23/03/2010, 03h23
  3. lancer une des procédures stockes oracle
    Par ouadie99 dans le forum C#
    Réponses: 3
    Dernier message: 13/05/2008, 12h39
  4. Réponses: 6
    Dernier message: 31/03/2008, 10h49
  5. Liste des procédures stockées d'une base de données
    Par Delphi-ne dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 06/03/2008, 19h31

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