|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 15 ![]() |
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 |
|
|
00
|
|
|
#2 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Salut,
INSERT_ID() n'existe pas mais ça m'a bien l'air d'être égal à LAST_INSERT_ID()+1 non ?
__________________
Pensez au bouton
|
|
|
00
|
|
|
#3 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 15 ![]() |
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 ... |
|
|
00
|
|
|
#4 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
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
|
|
|
00
|
|
|
#5 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 15 ![]() |
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 ? |
|
|
00
|
|
|
#6 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
Une valeur factice dont tu sais qu'elle est toujours présente dans la table maître... ?
__________________
Pensez au bouton
|
|
|
00
|
|
|
#7 |
|
Invité de passage
![]() Inscription : mars 2006 Messages : 15 ![]() |
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é. |
|
|
00
|
|
|
#8 |
|
Provisoirement toléré
Inscription : juin 2003 Messages : 2 622 ![]() |
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
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com