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 :

transaction / auto_increment


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Par défaut transaction / auto_increment
    Bonjour
    Les tables de ma base de données sont en innoDB.
    Et j'utilise les transactions pour préserver la cohérence de la BD.
    à première vue cela fonctionne bien sauf dans un cas précis :
    les tables :
    resultat : clé primaire, idManip auto_incrémenté
    celll_type: clé primaire, cellCode
    create_cell_type : clé primaire, (idManip, cellCode) les clés étrangères des tables précédentes
    Le problème (semblait) simple.
    1- Insertion dans resultat
    2- récupération de l'id auto_incrémenté
    3- Insertion dans cell_type
    4- Insertion dans create_cell_type des deux valeurs récupérées précédemment...

    Mais cela ne fonctionne pas, j'ai une erreur de violation de clé étrangère lorsque je veux faire l'insertion dans la dernière table(create_cell_type) et si je vais voir dans ma BD effectivement à ce moment là, idManip n'a pas été entré.
    Le seul moyen pour que cela fonctionne c'est faire un commit après les insertions et dans ce cas, je perds tout l'intérêt de faire une transaction.

    Mon code (simplifié)
    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
     
    //debut de transaction
    @mysql_query("BEGIN");
    //insertion dans la bD dans la table resultat
    $attributs="idPlate, idExperience, dateManip, idProtocoleUsed, qualite";
    $valeurs="$idPlate,$idExperience,'$dateManip', $protocole, $qualite";
    $req="INSERT INTO resultat($attributs) VALUES ($valeurs)";
    if(mysql_query($req)){
    	$idManip=mysql_insert_id();
    }
    //insertion dans la table cell_type
    $attributs="cellCode,nomLabPrimaire,cellCode_Origin,nbPassages,mouseFeederCells,karyotype";
    $valeurs="'$cell','$nomLabPrimaire','$cellCode_Origin',$nbPassages,$feeder,'$karyotype'";
    $insertion="INSERT INTO cell_type ($attributs) VALUES ($valeurs)";
     
    if(mysql_query($insertion)) {
    //insertion dans create_cell_type de l'idManip
    	$sql1="INSERT INTO create_cell_type (idManip, cellCode) VALUES ('$idManip','$cell')";
    if(mysql_query($sql1))
    {
    @mysql_query("COMMIT");
    $cellType[$i]=$cell;
    //on enregistre les types cellulaires crées dans un tableau
    }
    else
    {
    @mysql_query("ROLLBACK");
    }
    }[/INDENT]
    Quelqu'un peut-il m'aider je n'arrive pas à comprendre le problème...

    Merci

  2. #2
    Membre éprouvé Avatar de rieppe
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    Salut,

    Si tu affiche $idManip récupérer avec le mysql_insert_id() avant de faire tes autres requêtes, est-ce qu'il a une valeur ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Par défaut
    en fait j'ai une valeur pour $idManip, je la stocke dans une variable de session.

    lorsque l'insertion doit être faite dans la dernière table, ce sont les bonnes valeurs qui s'affiche dans la requête....sauf que la valeur $idManip n'a pas été enregistré dans la table resultat...d'où la violation de clé étrangère

  4. #4
    Membre éprouvé Avatar de rieppe
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    Okay je comprend mieux ton problème.

    Par contre j'ai encore jamais mis en oeuvre les transactions avec MySQL :/

    Peut etre une configuration à faire au niveau du serveur MySQL :/

    Ca m'interesserait bien si quelqun avait une solution a proposer

  5. #5
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    14
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 14
    Par défaut
    Je ne pense pas qu'il ya ait de problème de configuration,
    j'ai, par ailleurs, d'autres scripts qui utilisent le meme script de départ (insertion dans resultat puis recupération de la valeur idManip) et qui ensuite font d'autres insertions en utilisant cette valeur idManip...et là les transactions fonctionnent parfaitement bien, en cas de souci sur une insertion, le rollback s'effectue...
    C'est pour cela que je suis très perplexe...

  6. #6
    Membre éprouvé Avatar de rieppe
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2004
    Messages
    115
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2004
    Messages : 115
    Par défaut
    Effectivement ya de quoi O_O

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

Discussions similaires

  1. Transaction et auto_increment
    Par Orni-Dev dans le forum JDBC
    Réponses: 3
    Dernier message: 15/09/2009, 15h35
  2. gestion d'erreur et de transactions....
    Par Dge dans le forum MS SQL Server
    Réponses: 9
    Dernier message: 08/02/2006, 22h20
  3. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  4. [PostgreSQL]transactions
    Par adri1 dans le forum PostgreSQL
    Réponses: 3
    Dernier message: 10/04/2003, 14h37
  5. Transaction avec DoCmd.runsql ???
    Par Gandalf24 dans le forum VBA Access
    Réponses: 29
    Dernier message: 11/02/2003, 20h35

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