Triggery zwane inaczej wyzwalaczami, ponieważ ich wywołanie zwykle uzależnione jest od jakiegoś zdarzenia. Zdarzeniem tym zwykle jest jakaś operacja na danych – INSERT, DELETE bądź UPDATE. Wyzwalacz może być wywoływany albo przed (BEFORE) albo po (AFTER) zdarzeniu (włożeniu do bazy rekordu, usunięciu go lub zmienieniu)
Przykładowo utworzony trigger:
CREATE TRIGGER nazwa_triggera
BEFORE UPDATE ON nazwa_tabeli
FOR EACH ROW SET NEW.nazwa_pola="jakis tekst";
Trigger ten jest może średnio przydatny ale dobrze ilustruje możliwości. Co powoduje – otóż przed każdym insertem do tabeli “nazwa_tabeli” w pole nazwa_pola wpisywany jest “jakis_tekst”. Nawet jeśli polecenie INSERT będzie wyglądać mniej więcej tak:
CREATE TRIGGER nazwa_trigger
AFTER DELETE ON nazwa_tabeli
FOR EACH ROW SET @oidy=CONCAT(@oidy,','OLD.id);
To trigger spowoduje, że zamiast tekstu “tralalalala” zostanie w bazie umieszcziony tekst “jakis tekst”. Przyda się to jeśli już po stronie serwera baz danych chcemy w jakiś sposób weryfikować dane zapisywane do bazy. Oczywiście zamiast możemy też zrobić trigger reagujący na UPDATE danych:
CREATE TRIGGER nazwa_triggera
BEFORE UPDATE ON nazwa_tabeli
FOR EACH ROW SET NEW.nazwa_pola="jakis tekst";
Wówczas jeśli wywołamy następujący UPDATE:
UPDATE nazwa_tabeli SET id=id+12 WHERE id>12;
Wszystkie wiersze przetworzone przez to zapytanie, czyli te gdzie w polu id jest liczba większa od 12 w polu nazwa_pola będą miały tekst postaci “jakis tekst”.
Można by też zrobić trigger, który zwróci nam id wszystkich usuniętych z bazy elementów:
CREATE TRIGGER nazwa_triggera
AFTER DELETE ON nazwa_tabeli
FOR EACH ROW SET @oidy=CONCAT(@oidy,','OLD.id);
Następnie usuwamy to co potrzebujemy uprzednio ustawiając zmienną @oidy na pustą:
SET @oidy='';
DELETE FROM nazwa_tabeli WHERE id>100;
Żeby dowiedzieć się jakie id zostały usunięte:
SELECT @oidy
Wówczas otrzymamy ciąg w postaci np.:125,240,2134