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 :

auto_increment dans un insert avec un select imbriqué


Sujet :

Requêtes MySQL

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut auto_increment dans un insert avec un select imbriqué
    Salut à tous,


    J'ai un soucis avec une requête sous MySQL 5, j'aimerais avoir votre avis.
    Voici la définition de la table dans laquelle j'aimerais insérer mes données :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    CREATE TABLE xfg_temp_unique.p_carac_temp 
    (
      `ID` int(11) NOT NULL auto_increment,
      `ÌD_OLD` int(11) default NULL,
      `DATEFIN` date default NULL,
      `ORDRE` int(11) default NULL,
      `TYPE` varchar(255) NOT NULL,
      `ACTIF` tinyint(1) default '0',
      `NOM` varchar(255) NOT NULL,
      `DATEDEBUT` date default NULL,
      `REGION` int(2) NOT NULL,
       PRIMARY KEY  (`ID`)
    )
    ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;
    J'aimerais maintenant pouvoir insérer des données dans cette table sans mentionner de valeur pour l'auto_increment et en me basant sur le resultat du notre table à l'aide d'un select comme voici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     
    insert into xfg_temp_unique.p_carac_temp 
    (ID, ID_OLD, DATEFIN, ORDRE, TYPE, ACTIF, NOM, DATEDEBUT, REGION) VALUES 
    (default, SELECT ID, DATEFIN, ORDRE, TYPE, ACTIF, NOM, DATEDEBUT, 01 
    from xfg_temp.p_matable);
    J'ai beau essayer de mettre default, null, last_insert_id() ou même mysql_insert_id(). Mais rien à faire.

    Ainsi comment je peux combiner une insert quoi dois être basé sur une requete pour tous les champs sauf 2
    +
    une valeur d'auto incrémentation (fourni ou pas ca m'est égal mais il faut qu'elle soit inseré)
    +
    une valeur determiné (une constante).


    En vous remerciant de votre éclairage

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 954
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 954
    Par défaut
    Pour un INSERT c'est soit VALUES soit SELECT, et pour l'auto-increment il suffit de ne pas mentionner la colonne dans l'INSERT :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    INSERT INTO xfg_temp_unique.p_carac_temp (ID_OLD, DATEFIN, ORDRE, TYPE, ACTIF, NOM, DATEDEBUT, REGION)
    SELECT ID, DATEFIN, ORDRE, TYPE, ACTIF, NOM, DATEDEBUT, 1 
      FROM xfg_temp.p_matable
    A noter que 01 ne peut pas être inséré dans un integer, ce sera 1.

  3. #3
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    Merci à toi skuatamad cela marche.

    Par contre serais-tu pourquoi lorsque j'insère 242 lignes dans ma nouvelle table, la valeur de l'auto-increment est de 256 ?

    J'ai bien un COUNT(*) de 242 et à l'insertion mon select possède bien aussi 242 lignes. Pourtant si je fais de nouvelles insertion dans ma table il va recommencer la clé primaire à 256 au lui de 243 ?

    Bref mon auto_increment s'emballe et zappe des plages de données alors qu'elles ne sont pas utilisés.


    Je précise que mes variables system MySQL sont égal à :
    auto_increment_increment = 1
    auto_increment_offset = 1

    et que mon serveur MySQL est un serveur de dev en localhost sur lequel il n'existe que 1 base avec uniquement 2 tables (250lignes max)

  4. #4
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Peut-être aviez-vous commencé à insérer des lignes avant cette insertion en masse ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre très actif
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2007
    Messages : 643
    Par défaut
    malheureusement non puisque je créé la table exprès pour cette requête. Je l'ai même supprimé pour recommencer à nouveau le traitement.

  6. #6
    Expert éminent
    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 818
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 818
    Billets dans le blog
    14
    Par défaut
    Ce n'est pas bien grave puisqu'un identifiant auto-incrémenté est une clé technique et sans signification.

    Ceci dit, si vous voulez repartir d'une situation vierge, vous pouvez forcer l'auto-incrément à repartir de zéro après avoir vidé la table.
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole, en retraite... mais toujours Autoentrepreneur à l'occasion.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. [INSERT][SELECT] insert avec un select imbriqué
    Par narmataru dans le forum SQL
    Réponses: 11
    Dernier message: 06/03/2013, 03h04
  2. insert avec un select imbriqué
    Par sebastien00 dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/06/2008, 12h45
  3. Récupération de l'auto_increment dans l'insert en cours
    Par ultraboa dans le forum SQL Procédural
    Réponses: 7
    Dernier message: 07/03/2006, 13h19
  4. [ SQL ] Faire un update avec un select imbriqué
    Par zozolh2 dans le forum Langage SQL
    Réponses: 2
    Dernier message: 11/04/2005, 12h05
  5. pb d'insertion avec un SELECT sur une autre table
    Par epeichette dans le forum Requêtes
    Réponses: 3
    Dernier message: 03/01/2005, 22h58

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