MySQL Tahák

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