CodeGym /Kursy /SQL SELF /Użycie RETURNING do pobierania danych po in...

Użycie RETURNING do pobierania danych po insercie/aktualizacji

SQL SELF
Poziom 22, Lekcja 0
Dostępny

Dzisiaj dorzucimy jeszcze jeden magiczny trick do naszej wiedzy: komendę RETURNING. To potężne narzędzie, które pozwala od razu dostać potrzebne dane po insercie, update albo delete. Wyobraź sobie, że wrzucasz wiersz do tabeli i od razu dostajesz jego unikalny identyfikator. Wygodne? No jasne! No to uczymy się!

Po wykonaniu operacji INSERT, UPDATE albo DELETE czasem trzeba od razu dostać dane, które zostały zmienione. Na przykład, po dodaniu nowego wiersza do tabeli musimy znać jego automatycznie wygenerowany klucz główny (unikalny identyfikator). Zamiast wysyłać osobne zapytanie, żeby dostać te dane, możemy to zrobić od razu przy tej operacji za pomocą RETURNING.

Załóżmy, że dodajesz nowego studenta do tabeli students. Każdy student ma unikalny identyfikator (powiedzmy, student_id), który generuje się automatycznie. Po dodaniu nowego wpisu chcesz od razu użyć tego identyfikatora do zapisania studenta na kurs. Bez RETURNING musiałbyś najpierw dodać studenta, potem zrobić osobne zapytanie SELECT, żeby znaleźć jego identyfikator. Z RETURNING wszystko robisz jednym zapytaniem!

Składnia komendy RETURNING

Komenda RETURNING dodaje się na końcu operacji INSERT, UPDATE i DELETE. Ogólna składnia wygląda tak:

-- INSERT składnia:
INSERT INTO tabela (column1, column2, ...)
VALUES (value1, value2, ...)
RETURNING kolumna;

-- UPDATE składnia:
UPDATE tabela
SET column1 = value1
WHERE warunek
RETURNING kolumna;

-- DELETE składnia:
DELETE FROM tabela
WHERE warunek
RETURNING kolumna;

RETURNING pozwala wskazać, które kolumny ze zmienionych wierszy chcesz dostać. Może to być jedna konkretna kolumna (np. klucz główny) albo kilka kolumn naraz.

Użycie RETURNING z INSERT

Spójrzmy na przykład tabeli students:

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

Dodajemy nowego studenta i od razu dostajemy jego identyfikator:

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

Zapytanie zwróci identyfikator dodanego studenta:

student_id
1

Właśnie dodałeś studenta Otto Lin, a PostgreSQL od razu podał ci jego student_id. Wygodne? No pewnie!

A teraz wrzućmy i od razu pobierzmy kilka kolumn. Jeśli potrzebujesz nie tylko student_id, ale też inne dane, np. imię i nazwisko studenta, możesz je pobrać przez RETURNING:

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

Wynik:

student_id first_name last_name
2 Alex Ming

Użycie RETURNING z UPDATE

Czasem po aktualizacji danych trzeba wiedzieć, które dokładnie wiersze zostały zmienione. RETURNING świetnie się do tego nadaje.

Wyobraź sobie, że student Otto Lin postanowił zmienić swój email. Zaktualizujmy jego dane i od razu pobierzmy info o zmienionym wierszu:

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

Wynik:

student_id email
1 lin.new@example.com

Teraz masz pewność, że email studenta z student_id = 1 został zaktualizowany.

Użycie RETURNING z DELETE

Kiedy usuwasz wpisy z tabeli, czasem warto wiedzieć, które wiersze zostały usunięte. Z RETURNING możesz dostać dane usuniętych wierszy.

Przykład: załóżmy, że student Peter Ming został wyrzucony. Usuwamy go z tabeli i pobieramy info o jego usunięciu:

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

Wynik:

student_id first_name last_name
2 Peter Ming

Teraz masz pewność, że to właśnie Peter Ming został usunięty.

Praktyczne wskazówki

Używaj RETURNING zawsze, kiedy potrzebujesz dane zmienionych wierszy. Dzięki temu unikasz niepotrzebnych zapytań do bazy.

Minimalizuj ilość zwracanych danych. Jeśli potrzebujesz tylko klucza głównego, pobieraj tylko jego.

W połączeniu z transakcjami RETURNING jest szczególnie mocne. Na przykład możesz dodawać dane do kilku powiązanych tabel, przekazując identyfikatory przez RETURNING.

Typowe błędy przy użyciu RETURNING

Często początkujący zapominają, że RETURNING działa tylko na zmienionych wierszach. Na przykład, jeśli zapytanie UPDATE albo DELETE nie znalazło żadnego wiersza, RETURNING zwróci pusty wynik. Nie panikuj, to normalne. Po prostu upewnij się, że twoje zapytanie jest poprawne, albo obsłuż ten przypadek w kodzie aplikacji.

I jeszcze jeden częsty błąd: próba użycia RETURNING dla nieistniejących kolumn. Zawsze sprawdź, czy wszystkie pobierane kolumny istnieją w twojej tabeli.

Teraz już wiesz, jak dzięki RETURNING można mega uprościć pracę z danymi. To jedno z tych narzędzi, które naprawdę docenisz przy pisaniu prawdziwych aplikacji. Do przodu, po nowe horyzonty!

2
Zadanie
SQL SELF, poziom 22, lekcja 0
Niedostępne
Wstawianie danych z zwrotem identyfikatora
Wstawianie danych z zwrotem identyfikatora
Komentarze
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION