CodeGym /Kurse /SQL SELF /Verwendung von RETURNING um Daten nach Inse...

Verwendung von RETURNING um Daten nach Insert/Update zu bekommen

SQL SELF
Level 22 , Lektion 0
Verfügbar

Heute packen wir noch ein magisches Feature zu unserem Wissen dazu: das RETURNING-Statement. Das ist ein ziemlich mächtiges Tool, mit dem du direkt nach einem Insert, Update oder Delete die gewünschten Daten zurückbekommst. Stell dir vor, du fügst eine Zeile in eine Tabelle ein und bekommst sofort die eindeutige ID zurück. Praktisch, oder? Na klar! Lass uns loslegen!

Nach INSERT-, UPDATE- oder DELETE-Operationen brauchst du manchmal direkt die Daten, die betroffen waren. Zum Beispiel: Nach dem Einfügen einer neuen Zeile willst du wissen, welcher Primärschlüssel (also die eindeutige ID) automatisch vergeben wurde. Anstatt eine extra SELECT-Abfrage zu schicken, kannst du das direkt mit RETURNING erledigen.

Angenommen, du fügst einen neuen Studenten in die Tabelle students ein. Jeder Student hat eine eindeutige ID (zum Beispiel student_id), die automatisch generiert wird. Nach dem Insert willst du diese ID sofort weiterverwenden, z.B. um den Studenten für einen Kurs einzutragen. Ohne RETURNING müsstest du erst den Studenten einfügen und dann mit einer separaten SELECT-Abfrage die ID suchen. Mit RETURNING geht das alles in einem Rutsch!

Syntax von RETURNING

Das RETURNING-Statement kommt ans Ende von INSERT-, UPDATE- und DELETE-Befehlen. Hier ist die allgemeine Syntax:

-- INSERT Syntax:
INSERT INTO tabelle (column1, column2, ...)
VALUES (value1, value2, ...)
RETURNING spalte;

-- UPDATE Syntax:
UPDATE tabelle
SET column1 = value1
WHERE bedingung
RETURNING spalte;

-- DELETE Syntax:
DELETE FROM tabelle
WHERE bedingung
RETURNING spalte;

Mit RETURNING kannst du angeben, welche Spalten der geänderten Zeilen du zurückhaben willst. Das kann eine einzelne Spalte sein (z.B. der Primärschlüssel) oder gleich mehrere Spalten.

RETURNING mit INSERT verwenden

Schauen wir uns ein Beispiel für die Tabelle students an:

CREATE TABLE students (
    student_id SERIAL PRIMARY KEY,
    first_name TEXT NOT NULL,
    last_name TEXT NOT NULL,
    email TEXT UNIQUE
);

Wir fügen einen neuen Studenten ein und bekommen direkt seine ID zurück:

INSERT INTO students (first_name, last_name, email)
VALUES ('Otto', 'Lin', 'otto.lin@example.com')
RETURNING student_id;

Die Abfrage gibt die ID des eingefügten Studenten zurück:

student_id
1

Du hast gerade den Studenten Otto Lin eingefügt und PostgreSQL hat dir sofort seine student_id verraten. Praktisch? Und wie!

Jetzt lass uns mal mehrere Spalten auf einmal zurückgeben. Wenn du nicht nur student_id, sondern auch den Namen und Nachnamen brauchst, kannst du das mit RETURNING anfordern:

INSERT INTO students (first_name, last_name, email)
VALUES ('Alex', 'Ming', 'alex.ming@example.com')
RETURNING student_id, first_name, last_name;

Ergebnis:

student_id first_name last_name
2 Alex Ming

RETURNING mit UPDATE verwenden

Manchmal willst du nach einem Update wissen, welche Zeilen sich wirklich geändert haben. RETURNING ist dafür perfekt.

Stell dir vor, Student Otto Lin will seine Email ändern. Wir aktualisieren seine Daten und bekommen direkt die Infos zur geänderten Zeile zurück:

UPDATE students
SET email = 'lin.new@example.com'
WHERE student_id = 1
RETURNING student_id, email;

Ergebnis:

student_id email
1 lin.new@example.com

Jetzt weißt du ganz genau, dass die Email vom Studenten mit student_id = 1 erfolgreich geändert wurde.

RETURNING mit DELETE verwenden

Wenn du Zeilen aus einer Tabelle löschst, ist es manchmal hilfreich zu wissen, welche Zeilen tatsächlich entfernt wurden. Mit RETURNING kannst du die Daten der gelöschten Zeilen bekommen.

Hier ein Beispiel: Angenommen, Student Peter Ming wurde exmatrikuliert. Wir löschen ihn aus der Tabelle und bekommen Infos über die gelöschte Zeile:

DELETE FROM students
WHERE student_id = 2
RETURNING student_id, first_name, last_name;

Ergebnis:

student_id first_name last_name
2 Peter Ming

Jetzt bist du sicher, dass genau Peter Ming gelöscht wurde.

Praxistipps

Nutze RETURNING immer, wenn du Daten der betroffenen Zeilen brauchst. So sparst du dir unnötige Datenbankabfragen.

Halte die zurückgegebenen Daten so klein wie möglich. Wenn du nur den Primärschlüssel brauchst, frage auch nur den ab.

In Kombination mit Transaktionen wird RETURNING richtig mächtig. Zum Beispiel kannst du Daten in mehrere verknüpfte Tabellen einfügen und die IDs direkt mit RETURNING weitergeben.

Typische Fehler bei RETURNING

Viele Anfänger vergessen, dass RETURNING nur mit den tatsächlich geänderten Zeilen arbeitet. Wenn zum Beispiel ein UPDATE oder DELETE keine Zeile findet, gibt RETURNING einfach ein leeres Ergebnis zurück. Keine Panik, das ist normal. Check einfach, ob deine Abfrage stimmt oder fang diesen Fall im Code ab.

Ein weiterer häufiger Fehler: Du versuchst, RETURNING für Spalten zu nutzen, die es gar nicht gibt. Achte immer darauf, dass alle angeforderten Spalten wirklich in deiner Tabelle existieren.

Jetzt weißt du, wie du mit RETURNING die Arbeit mit Daten deutlich vereinfachen kannst. Das ist eines dieser Tools, die du in echten Projekten richtig zu schätzen lernst. Auf zu neuen Abenteuern!

Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION