0Pricing
SQL Academy · Lekcja

Budowa triggerów: BEFORE/AFTER, FOR EACH ROW

Rozumieć moment wykonania triggera, jego szczegółowość (wiersz a instrukcja) oraz znaczenie NEW i OLD wewnątrz funkcji triggera

Budowa triggerów: BEFORE/AFTER, FOR EACH ROW to bezpłatna lekcja SQL Academy na CoddyKit. To lekcja 1 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej SQL Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs SQL Academy zawiera 4 lekcji w sumie.

Czym jest wyzwalacz

Wyzwalacz to funkcja, którą baza danych wywołuje automatycznie przed lub po wykonaniu INSERT, UPDATE, DELETE albo TRUNCATE na tabeli.

Dwa elementy: funkcja i wyzwalacz

Należy napisać funkcję zwracającą trigger, a następnie przypisać ją do tabeli:

CREATE OR REPLACE FUNCTION set_updated_at()
RETURNS TRIGGER AS $$
BEGIN
  NEW.updated_at := NOW();
  RETURN NEW;
END;
$$ LANGUAGE plpgsql;

CREATE TRIGGER trg_set_updated_at
BEFORE UPDATE ON users
FOR EACH ROW EXECUTE FUNCTION set_updated_at();

BEFORE a AFTER

  • BEFORE — uruchamia się przed zapisaniem wiersza; może modyfikować NEW
  • AFTER — uruchamia się po zapisie; służy do efektów ubocznych (audyt, powiadomienia)

FOR EACH ROW a FOR EACH STATEMENT

  • FOR EACH ROW — uruchamia się raz dla każdego zmodyfikowanego wiersza; dostępne są NEW i OLD
  • FOR EACH STATEMENT — uruchamia się raz dla każdej instrukcji, bez dostępu do poszczególnych wierszy

NEW i OLD

W wyzwalaczu wierszowym:

  • NEW — nowy wiersz (INSERT, UPDATE)
  • OLD — poprzedni wiersz (UPDATE, DELETE)

Znaczenie wartości zwracanej

W przypadku wyzwalaczy wierszowych BEFORE:

  • Zwróć NEW, aby kontynuować operację na tym wierszu
  • Zwróć zmodyfikowane NEW, aby zmienić zapisywane dane
  • Zwróć NULL, aby anulować operację dla tego wiersza

Filtr WHEN

Warunkowe uruchamianie:

CREATE TRIGGER trg_log_status
AFTER UPDATE OF status ON orders
FOR EACH ROW WHEN (OLD.status IS DISTINCT FROM NEW.status)
EXECUTE FUNCTION log_status_change();

OF column

BEFORE/AFTER UPDATE może uruchamiać się tylko wtedy, gdy zmienią się określone kolumny:

CREATE TRIGGER ... AFTER UPDATE OF status ON orders ...

Wiele wyzwalaczy

Wyzwalacze uruchamiają się w kolejności alfabetycznej według nazwy wyzwalacza. Używaj prefiksów (00_, 10_, ...), aby kontrolować kolejność.

Wydajność wyzwalaczy

Wyzwalacze wierszowe uruchamiają się dla każdego wiersza — złożona logika w wyzwalaczu wierszowym × duża liczba operacji DML = wolne działanie. W przypadku masowych efektów ubocznych preferuj wyzwalacze instrukcji.

Wyłączanie wyzwalaczy

Tymczasowe pomijanie:

ALTER TABLE orders DISABLE TRIGGER trg_audit;
-- bulk load...
ALTER TABLE orders ENABLE TRIGGER trg_audit;

-- Disable ALL triggers (use carefully):
ALTER TABLE orders DISABLE TRIGGER ALL;

Rekurencja wyzwalaczy

Instrukcja UPDATE w wyzwalaczu, która modyfikuje tę samą tabelę, ponownie uruchamia wyzwalacz. Używaj zabezpieczeń (pg_trigger_depth()) albo starannie zaprojektuj rozwiązanie.

Podsumowanie

Wyzwalacze automatyzują reakcje na poziomie poszczególnych wierszy.

  • Funkcja zwracająca TRIGGER + CREATE TRIGGER
  • BEFORE do modyfikowania, AFTER do efektów ubocznych
  • NEW/OLD do dostępu do wiersza
  • WHEN i OF column do ograniczania zakresu uruchamiania

Szybkie sprawdzenie

Chce Pan/Pani automatycznie aktualizować kolumnę updated_at przy każdej zmianie wiersza. Jaka konfiguracja wyzwalacza będzie właściwa?

Często zadawane pytania

Czy lekcja „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW” jest bezpłatna?

Tak — pełny tekst „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu SQL Academy, przejdź na CoddyKit PRO. Kurs SQL Academy zawiera 4 lekcji w sumie.

Co nauczysz się w „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW”?

Rozumieć moment wykonania triggera, jego szczegółowość (wiersz a instrukcja) oraz znaczenie NEW i OLD wewnątrz funkcji triggera Ćwiczysz SQL Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.

Czy potrzebuję doświadczenia, aby zacząć SQL Academy?

Nie wymagamy żadnego doświadczenia. SQL Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 1 z 4.

Ile czasu zajmuje lekcja „Budowa triggerów: BEFORE/AFTER, FOR EACH ROW”?

Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.

Czy mogę pisać i uruchamiać kod w tej lekcji SQL Academy?

Tak. Każda lekcja SQL Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.

Wszystkie lekcje w tym kursie

  1. Budowa triggerów: BEFORE/AFTER, FOR EACH ROW
  2. Podstawy funkcji PL/pgSQL
  3. Bloki DO i kod anonimowy
  4. Audytowanie tabel za pomocą triggerów
← Powrót do SQL Academy