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 :

Récupération de l'auto_increment dans l'insert en cours


Sujet :

SQL Procédural MySQL

  1. #1
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Par défaut Récupération de l'auto_increment dans l'insert en cours
    Bonjour

    j'aimerais savoir s'il est possible de récupérer la valeur du champ auto incrémenté dans l'insert en cours (un genre de insert_id à la place de last_insert_id) ?

    il y a deux cas où cela me serait utile :

    1) lorsque je dois générer automatiquement une référence qui contient l'ID (une colonne qui contiendrait une chaine du type 'REF_' + ID).

    2) lorsqu'une table a une clé étrangère sur elle même et que la valeur par défaut de cette clé serait l'ID (une nouvelle entrée pointerait par défaut sur elle-même)

    dans les deux cas, est-il possible de réaliser cela avec un seul ordre INSERT ?

    merci de votre aide

  2. #2
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Salut,

    INSERT_ID() n'existe pas mais ça m'a bien l'air d'être égal à LAST_INSERT_ID()+1 non ?

  3. #3
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Par défaut
    j'ai pensé aussi à utiliser LAST_INSERT_ID()+1 mais en réalité ça marche pas parce que LAST_INSERT_ID() n'est pas une fonction globale mais une fonction liée à ta connexion.

    en fait ça rend l'ID du dernier INSERT fait avec la connexion que tu utilises et ignore complètement les INSERT qui auraient pu être faits entre temps avec d'autres connexions.

    en plus ça retourne 0 quand tu ouvres une nouvelle connexion.

    en conclusion, cette solution ne marche pas quand tu fais l'INSERT après un redémarrage du serveur ou quand tu utilises un pool de connexions, ce qui est quand même plutôt gênant ...

  4. #4
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Oui, exact

    Donc en un seul INSERT je ne vois pas trop, par contre ça doit être possible avec un INSERT puis un UPDATE sur LAST_INSERT_ID().

  5. #5
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Par défaut
    c'est bien ce que je craignais alors ...

    même si c'est pas beau, je peux m'en sortir dans le cas n°1, je fais mon premier INSERT en mettant mon champ ref à NULL, puis je remplis ce champ en faisant un UPDATE et en utilisant LAST_INSERT_ID(), ok.

    mais dans le cas n°2 je peux pas, car la clé étangère est NOT NULL.
    qu'est ce que je peux mettre comme valeur (NULL n'étant pas permis ici) dans mon INSERT avant de faire l'UPDATE ?

  6. #6
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Une valeur factice dont tu sais qu'elle est toujours présente dans la table maître... ?

  7. #7
    Membre averti
    Inscrit en
    Mars 2006
    Messages
    16
    Détails du profil
    Informations forums :
    Inscription : Mars 2006
    Messages : 16
    Par défaut
    la valeur doit pointer alors sur une ligne existante dans la table

    mais cela pose deux problèmes :

    - quelle valeur utiliser au début quand la base est vide ?

    - que faire si l'utilisateur supprime cette ligne de la table ?

    PS : je travaille pour une association sur la mise au point de sa base de contacts. Au début la base sera vide et par la suite, n'importe quel contact sera susceptible d'être supprimé.

  8. #8
    Membre Expert Avatar de Maximil ian
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    2 622
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 2 622
    Par défaut
    Je ne sais pas, j'avoue que je manque d'inspiration sur ce cas bien particulier
    Quelqu'un d'autre peut-être ?

Discussions similaires

  1. auto_increment dans un insert avec un select imbriqué
    Par miltone dans le forum Requêtes
    Réponses: 10
    Dernier message: 29/08/2012, 22h34
  2. INSERT avec récupération de l'AUTO_INCREMENT
    Par PierreVeuillez dans le forum Requêtes
    Réponses: 11
    Dernier message: 23/02/2012, 14h44
  3. Réponses: 2
    Dernier message: 14/10/2011, 17h48
  4. [MySQL] Auto_increment dans un Insert
    Par Seb981 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 12/07/2007, 14h47
  5. impossible d'utiliser ma fonction dans un insert
    Par caramel dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 10/04/2003, 15h04

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