Précédent   Forum des professionnels en informatique > Bases de données > MySQL > SQL Procédural
SQL Procédural Forum d'entraide sur les triggers, les procédures stockées et les fonctions en MySQL
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 05/03/2006, 13h18   #1
Invité de passage
 
Inscription : mars 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 15
Points : 1
Points : 1
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
ultraboa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2006, 16h30   #2
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Salut,

INSERT_ID() n'existe pas mais ça m'a bien l'air d'être égal à LAST_INSERT_ID()+1 non ?
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/03/2006, 21h06   #3
Invité de passage
 
Inscription : mars 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 15
Points : 1
Points : 1
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 ...
ultraboa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2006, 10h17   #4
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
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().
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2006, 16h34   #5
Invité de passage
 
Inscription : mars 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 15
Points : 1
Points : 1
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 ?
ultraboa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2006, 18h14   #6
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Une valeur factice dont tu sais qu'elle est toujours présente dans la table maître... ?
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/03/2006, 22h18   #7
Invité de passage
 
Inscription : mars 2006
Messages : 15
Détails du profil
Informations forums :
Inscription : mars 2006
Messages : 15
Points : 1
Points : 1
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é.
ultraboa est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/03/2006, 13h19   #8
Provisoirement toléré
 
Avatar de Maximilian
 
Inscription : juin 2003
Messages : 2 622
Détails du profil
Informations forums :
Inscription : juin 2003
Messages : 2 622
Points : 2 505
Points : 2 505
Je ne sais pas, j'avoue que je manque d'inspiration sur ce cas bien particulier
Quelqu'un d'autre peut-être ?
__________________
Pensez au bouton
Maximilian est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 05h00.


 
 
 
 
Partenaires

Hébergement Web