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
INSERT INTO table (...) VALUES (...) RETURNING colonnes;UPDATE table SET ... WHERE ... RETURNING colonnes;DELETE FROM table WHERE ... RETURNING colonnes;Exemple
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
- 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.
- Disponible dans SQLite 3.35+, PostgreSQL et MariaDB. SQL Server propose l'équivalent OUTPUT inserted.id, MySQL n'a pas d'équivalent.
- 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.
- 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
- INSERTINSERT ajoute de nouvelles lignes dans une table, une par une, par lot ou à partir d'une requête. Les colonnes non citées prennent leur valeur par défaut, ou NULL si aucune n'est prévue.
- UPDATEUPDATE modifie les valeurs de lignes existantes. La clause WHERE désigne les lignes visées, SET les nouvelles valeurs, qui peuvent se calculer à partir des anciennes (hausse de prix, statut).
- DELETEDELETE retire des lignes d'une table tout en conservant sa structure. On l'utilise pour purger des données obsolètes ou annulées, toujours avec un WHERE vérifié au préalable.
- UPSERT (ON CONFLICT)Un UPSERT insère une ligne ou, si sa clé existe déjà, met à jour la ligne en place. C'est la façon sûre de synchroniser un catalogue ou un import sans tester l'existence au préalable.