RETURNING-Klausel
PostgreSQL-Erweiterung: INSERT/UPDATE/DELETE gibt die geänderten Zeilen zurück. INSERT INTO users (name) VALUES ('Alice') RETURNING id, created_at — erspart ein separates SELECT nach dem INSERT für die automatisch generierte ID. Seit SQL:2023 standardisiert, aber schon seit Postgres 8.2 (2006) ein Feature.
Anwendungsfall: den automatisch generierten Primärschlüssel nach einem INSERT abgreifen (Alternative: LAST_INSERT_ID() in MySQL). UPDATE ... RETURNING liefert die vorherigen Werte für ein Audit-Log. DELETE ... RETURNING räumt auf und meldet zugleich, was gelöscht wurde. Kombinierbar mit CTEs: WITH inserted AS (INSERT ... RETURNING *) SELECT * FROM inserted JOIN .... Performance-Vorteil: ein einziger Roundtrip statt INSERT plus separatem SELECT. MySQL: Die RETURNING-Syntax kam zuerst in MariaDB 10.5 (2020), MySQL 8.x fehlt sie bis heute (Stand 2024). ORMs (SQLAlchemy, Django) nutzen RETURNING intern, wann immer verfügbar.