Triggery
Na této stránce se nachází informace o databázových triggerech. Jde o kód, který se automaticky spouští když se změní specifická tabulka.
Syntaxe
Kód pro vytvoření triggeru vypadá takto:
CREATE TRIGGER jméno_triggeru kdy_se_spustí pro_jakou_operaci ON jméno_tabulky FOR EACH ROW BEGIN # nějaký kód END
V předchozí ukázce jsem popsal co kde píšeme.
Pod jméno_triggeru píšeme jméno triggeru.
Pod kdy_se_spustí píšeme kdy se má trigger spustit. Máme dvě možnosti: BEFORE a AFTER. BEFORE znamená že se trigger spustí před provedením operace a AFTER znamená že se trigger spustí po provedení operace.
Pod pro_jakou_operaci píšeme pro jakou operaci se má trigger spustit. Můžeme si vybrat mezi INSERT, UPDATE a DELETE.
Pod jméno_tabulky píšeme jméno tabulky u které když se provede specifikovaná operace, spustí se trigger.
Mezi slova 'BEGIN' a 'END' píšeme kód, který se má spustit.
Ukázka Triggeru
Následující ukázka vytvoření triggeru ukazuje. Je tam použit příkaz DELIMITER, který mění znak, který slouží k ukončení příkazu. Používáme ho, protože uvnitř kódu ukončujeme příkazy, ale nechceme aby se hned spustili. Dále tam používáme příkaz SIGNAL SQLSTATE pomocí kterého nastavíme chybu, když je ve sloupci age přidávané položky menší hodnota než 18. Chybový kód 45000 představuje uživatelsky definovanou chybu, takže jej můžeme použít k vytvoření vlastních chyb. Myslím že jiný chybový kód než je 45000 není důležité znát.
DELIMITER $$ # změnění delimiteru (kód se nebude ukončovat pomocí ; ale $$) CREATE TRIGGER must_be_adult BEFORE INSERT ON users FOR EACH ROW BEGIN IF NEW.age < 18 # NEW představuje položku, která se má do tabulky vložit THEN # pokud je hodnota ve sloupci age menší než 18, tak vyhodíme chybu (položka se neuloží do tabulky) SIGNAL SQLSTATE '45000' # nastavení chybového kódu SET MESSAGE_TEXT = 'Must be an adult!'; # nastavení chybové zprávy END IF; END; $$ # ukončení kódu DELIMITER ; # změnění delimiteru zpět na ;
V předchozí ukázce kódu se ptáme jestli je uživatel dospělý než ho uložíme do databáze. Tuto operaci by bylo lepší dělat mimo MySQL a bylo by to rychlejší. Alespoň to ale ukazuje, že jde něco takového vytvořit.
Vypsání všech Triggerů
Všechny vytvořené triggery můžeme vypsat pomocí příkazu SHOW TRIGGERS.
SHOW TRIGGERS; # vypíše všechny triggery
Smazání Triggeru
Trigger můžeme smazat pomocí příkazu DROP TRIGGER.
DROP TRIGGER must_be_adult; # smaže Trigger, který se jmenuje must_be_adult