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 :
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 :
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);
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.
« 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é