prochain numéro de l'auto increment

prochain numéro de l'auto increment - SQL/NoSQL - Programmation

Marsh Posté le 12-05-2005 à 14:46:42    

Salut,
 
j'aurais besoin avant d'insérer un élément dans la table de connaître l'id qui va lui être attribué, sachant que ce champ est auto incrémenté. Existe-it-il une fonction qui renvoie le procjain numéro attribué par l'auto-increment ?

Reply

Marsh Posté le 12-05-2005 à 14:46:42   

Reply

Marsh Posté le 12-05-2005 à 14:47:17    

(avec MySQL)

Reply

Marsh Posté le 12-05-2005 à 19:32:15    

J'en doute, notamment parceque même si tu connais à l'avance ce numéro, si un autre process tente de créer une ligne, je doute que MySQL sâche gérer la réservation du numéro.
 
Rien ne vaut les séquences d'Oracle finalement.


Message édité par Arjuna le 12-05-2005 à 19:32:33
Reply

Marsh Posté le 17-05-2005 à 09:21:38    

Une astuce à la noix mais bon... Ca peut marcher dans ton cas : tu "commences" ton insertion en mettant tous les champs à NULL, tu récupères le last insert id avec mysql_insert_id(), puis tu fais ce que t'as à faire, et tu "finis" ton insertion à la fin, en faisant un UPDATE.
Par exemple, sur un site marchand, un type veut passer sa commande. Tu veux lui afficher son numéro de commande, qui est l'id de ta table commandes. Tu fais ton insert tout en haut de ta page, tu récupères le last insert id, tu lui affiches sa jolie page, avec son joli num de commande, ton formulaire pour qu'il renseigne les champs qu'il faut (genre son adresse ou des trucs comme ça) puis quand il clique sur OK, paf tu fais ton update avec les valeurs qu'il à entrées.
Monsieur Bricolage, quand tu nous tiens. Mais ça marche. En revanche faut faire gaffe si le type fait une connerie (par exemple il se barre sans avoir rempli le formulaire), à supprimer ta ligne qui contient plein de NULL sinon ta base va ressembler à rien en moins de 2. Trigger ? procédure stockée ? j'en sais rien, je dis p-e n'importe quoi, mais il faut faire gaffe.

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed