Formation PUB200 : MySQL, 2018 Les procédures et fonctions stockées

15.17 Retrouver l'identifiant autoincrémenté d'un enregistrement qui vient d'être créé


Prenons le cas où  vous travaillez avec la base de données garage qui contient des factures, associées à une voiture, et pour lesquelles on peut associer des lignes de factures pour indiquer chaque opération effectuée sur la voiture. Disons que vous voudriez coder une procédure stockée permettant d'ajouter une facture ainsi qu'une ligne pour cette facture. Si les identifiants de factures sont générés automatiquement par MySQL, comment faire alors pour rattacher la ligne à la facture nouvellement créée ?

Dans une procédure ou fonction stockée, MySQL vous permettra de retrouver la valeur du dernier identifiant automatiquement généré à l'aide des fonctions ou variables suivantes :

Les deux sont équivalentes.

Ex :

MySQL

CREATE PROCEDURE ajouter_facture(IN p_voiture_id INT, IN p_date DATE, IN p_operation_id, IN p_description VARCHAR(250), IN p_prix DECIMAL(6,2)

BEGIN

    -- (entête standard)

    DECLARE l_facture_id INT;

    INSERT INTO factures(voiture_id, date) VALUES(p_voiture_id, p_date);

 

    SET l_facture_id = LAST_INSERT_ID();

 

    INSERT INTO lignesfactures(facture_id, operation_id, description, prix, etat)

    VALUES (l_facture_id, p_operation_id, p_description, p_prix, 'T');

END$$

Certains programmeurs pourraient être tentés de coder une telle procédure comme suit :

MySQL

CREATE PROCEDURE ajouter_facture(IN p_voiture_id INT, IN p_date DATE, IN p_operation_id, IN p_description VARCHAR(250), IN p_prix DECIMAL(6,2)

BEGIN

    -- (entête standard)

    DECLARE l_facture_id INT;

   INSERT INTO factures(voiture_id, date) VALUES(p_voiture_id, p_date);

 

    SELECT MAX(id) INTO l_facture_id FROM factures;

 

    INSERT INTO lignesfactures(facture_id, operation_id, description, prix, etat)

    VALUES (l_facture_id, p_operation_id, p_description, p_prix, 'T');

END$$

Cette dernière technique n'est pas acceptable dans un environnement multi-usager.

Pour plus d'information

« How to Get the Unique ID for the Last Inserted Row ». MySQL. https://dev.mysql.com/doc/refman/5.7/en/getting-unique-id.html

▼Publicité

Veuillez noter que le contenu de cette fiche vous est partagé à titre gracieux, au meilleur de mes connaissances et sans aucune garantie.
Merci de partager !
Soumettre