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 :

Insertion dans plusieurs tables en meme temps


Sujet :

Requêtes MySQL

  1. #1
    Membre chevronné
    Profil pro
    MOA
    Inscrit en
    Décembre 2002
    Messages
    1 023
    Détails du profil
    Informations personnelles :
    Localisation : France, Eure et Loir (Centre)

    Informations professionnelles :
    Activité : MOA

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 023
    Points : 1 789
    Points
    1 789
    Par défaut Insertion dans plusieurs tables en meme temps
    Bonjour,

    j'ai 2 tables :

    table1 (id1, id2, nom);
    table2 (id2, prenom);

    Les champs en gras sont les clefs primaires en auto increment.

    Il faut donc dans un premier temps inserer les données dans la table2, récuperer la clef primaire id2 généré et enfin inserer dans la table1.


    Y a t-il moyen de faire cela en 1 seul requete ?

    insert table1 set id2=(insert table2 set prenom='toto'), nom='titi'
    En php, on pourrait le faire en recuperer l'id2 avec le mysql_insert_id lorsque l'on fait en 2 requete ...

    Mais n'y a t-il pas moyen de le faire en 1 seule car j'ai beaucoup de donnée à importé dans une base sur 2 tables et j'aimerais bien le faire en OneShot et eviter de le faire via un script php pour gagner du temps.

    Dans ce cas précis, la relation entre table1 et table2 sera (1,1) bien sur.

  2. #2
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    Citation Envoyé par weed
    Bonjour,

    j'ai 2 tables :

    table1 (id1, id2, nom);
    table2 (id2, prenom);

    Les champs en gras sont les clefs primaires en auto increment.

    Il faut donc dans un premier temps inserer les données dans la table2, récuperer la clef primaire id2 généré et enfin inserer dans la table1.


    Y a t-il moyen de faire cela en 1 seul requete ?



    En php, on pourrait le faire en recuperer l'id2 avec le mysql_insert_id lorsque l'on fait en 2 requete ...

    Mais n'y a t-il pas moyen de le faire en 1 seule car j'ai beaucoup de donnée à importé dans une base sur 2 tables et j'aimerais bien le faire en OneShot et eviter de le faire via un script php pour gagner du temps.

    Dans ce cas précis, la relation entre table1 et table2 sera (1,1) bien sur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    INSERT INTO Table2 (champs....) VALUES (valeurs...);
    INSERT INTO Table1 (id1) VALUES (LAST_INSERT_ID());
    ça devrais marcher ainsi.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

  3. #3
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Ca ne répond pas exactement à la question mais il me semblerait plus judicieux de définir id2 dans table1 comme clé étrangère...Ca éviterait un 2ème insert et ça serait plus efficace.

  4. #4
    Membre expérimenté Avatar de Yanika_bzh
    Homme Profil pro
    Responsable Applicatif et R&D
    Inscrit en
    Février 2006
    Messages
    1 144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Responsable Applicatif et R&D
    Secteur : Finance

    Informations forums :
    Inscription : Février 2006
    Messages : 1 144
    Points : 1 738
    Points
    1 738
    Par défaut
    Ca ne répond pas exactement à la question mais il me semblerait plus judicieux de définir id2 dans table1 comme clé étrangère...Ca éviterait un 2ème insert et ça serait plus efficace.
    Pour ma part je pense que cela repond a la question.
    id2 est deja une clé etrangere (meme si elle n'est pas formalisée).

    Cela éviterait un 2eme insert ?? Je ne dois pas avoir tout compris la question dans ce cas la
    Dans la connaissance du monde, ceux qui ne savent rien en savent toujours autant que ceux qui n'en savent pas plus qu'eux. (Pierre Dac)

  5. #5
    Membre averti Avatar de nicoaix
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2004
    Messages
    571
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Service public

    Informations forums :
    Inscription : Décembre 2004
    Messages : 571
    Points : 362
    Points
    362
    Par défaut
    Ca n'évite pas un 2eme insert... Autant pour moi, je me suis un peu emballé... ;-)

  6. #6
    Expert éminent
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 490
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 490
    Points : 6 044
    Points
    6 044
    Par défaut
    En faite je me suis trompé sur le nom des champ mais c'étais surtout pour montrer qu'il peut utiliser las_insert_id()

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    INSERT INTO Table2 (champs....) VALUES (valeurs...);
    INSERT INTO Table1 (id2) VALUES (LAST_INSERT_ID());
    Il a pas le choix de faire deux insertions. L'avantage de le faire en une instruction c'est que c'est fait en interne à Mysql plutôt que de passer par un language intermédiaire donc un va et vient.
    Mon avatar ? Ce n'est rien, c'est juste la tête que je fais lorsque je vois un code complètement frappa dingue !...

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

Discussions similaires

  1. Insertion dans plusieurs tables au meme temps
    Par javalhoussain dans le forum ASP.NET
    Réponses: 2
    Dernier message: 03/05/2011, 00h36
  2. Insert dans deux tables en meme temps?
    Par radzar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/04/2008, 11h33
  3. [SQL] Insertion dans plusieurs tables
    Par fadex dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/02/2007, 11h47
  4. cherche a vider plusieurs tables en meme temps?
    Par nenekes dans le forum Langage SQL
    Réponses: 10
    Dernier message: 01/02/2007, 18h58
  5. Insertion dans plusieurs tables : Transaction ?
    Par Invité dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/07/2006, 18h25

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