Aller au contenu
Modification (DML)

RETURNING

RETURNING renvoie les lignes touchées par un INSERT, un UPDATE ou un DELETE, dans la même instruction. On récupère ainsi l'identifiant généré ou les nouvelles valeurs sans requête supplémentaire.

  • RETURNING
  • OUTPUT
  • id généré
  • INSERT RETURNING

Syntaxe

Modèle
INSERT INTO table (...) VALUES (...) RETURNING colonnes;UPDATE table SET ... WHERE ... RETURNING colonnes;DELETE FROM table WHERE ... RETURNING colonnes;

Exemple

Exemple concret
UPDATE studentsSET class_id = 4WHERE age = 14RETURNING id, name, class_id;SELECT id, name, class_idFROM studentsWHERE class_id = 4;-- Jeu de données : école-- RETURNING renvoie : 5 | Emma Blanc | 4-- Le playground n'affiche que le résultat du dernier SELECT, qui confirme le changement.-- Résultat attendu :-- 5 | Emma Blanc | 4

À retenir

  1. Cas typique : INSERT INTO orders (customer_id, order_date, status) VALUES (5, '2024-05-02', 'en cours') RETURNING id donne l'identifiant de la commande pour insérer ses lignes juste après.
  2. Disponible dans SQLite 3.35+, PostgreSQL et MariaDB. SQL Server propose l'équivalent OUTPUT inserted.id, MySQL n'a pas d'équivalent.
  3. Piège : dans SQLite, RETURNING ne peut pas contenir d'agrégat (COUNT, SUM) et l'ordre des lignes renvoyées n'est pas garanti.
  4. Piège : RETURNING montre uniquement les lignes modifiées par l'instruction elle-même, pas celles changées en cascade par une clé étrangère ou un trigger.

Voir aussi