Trigger (databáze)
Author
Albert FloresTrigger (česky spouštěč) v databázi definuje činnosti, které se mají provést v případě definované události nad databázovou tabulkou. Definovanou událostí může být například vložení nebo smazání dat. Jednoduchá spoušť, která se má provést před vložením nového záznamu do tabulky může mít v SQL zápis:
CREATE TRIGGER jmeno_triggeru BEFORE INSERT ON jmeno_tabulky BEGIN -- samotný kód spouště END;
Tato spoušť před vložením dat do jmeno_tabulky provede příkazy vložené mezi BEGIN a END. Kód triggerů lze spouštět i v jiných okamžicích (viz dále). +more Pokud je spouštěný příkaz jen jeden, mohou být klíčová slova BEGIN a END vynechána.
Parametry syntaxe
Klíčové slovo INSERT indikuje, že trigger se spustí při vkládání do databáze. Místo něj může být též UPDATE nebo DELETE. +more * Klíčové slovo BEFORE indikuje, že se trigger spustí před vkládáním, úpravou nebo mazáním záznamu. Pokud by bylo místo něj AFTER, spustil by se trigger poté.
INSERT | Před vložením nového řádku. | Po vložení nového řádku. +more |
---|---|---|
V příkazu INSERT a druhé části příkazu REPLACE. | ||
UPDATE | Před úpravou existujícího řádku. | Po úpravě existujícího řádku. |
UPDATE | V příkazu UPDATE nebo v druhé části příkazu INSERT … ON DUPLICATE KEY UPDATE. | V příkazu UPDATE nebo v druhé části příkazu INSERT … ON DUPLICATE KEY UPDATE. |
DELETE | Před smazáním řádku. | Po smazání řádku. |
DELETE | V příkazu DELETE nebo první části příkazu REPLACE, kdy je nalezen záznam se stejným primárním klíčem, jejž REPLACE maže. Příkazy DROP TABLE ani TRUNCATE TABLE trigger nespouštějí, protože nedochází k doslovnému mazání jednotlivých záznamů. | V příkazu DELETE nebo první části příkazu REPLACE, kdy je nalezen záznam se stejným primárním klíčem, jejž REPLACE maže. Příkazy DROP TABLE ani TRUNCATE TABLE trigger nespouštějí, protože nedochází k doslovnému mazání jednotlivých záznamů. |
OLD. a NEW.
Uvnitř kódu triggeru lze použít dva speciální prefixy, platící jenom v něm a nikde jinde. Jsou to: * OLD. +more symbolizující „staré“ hodnoty měněného řádku (před přepsáním). Například OLD. nazev tak zpřístupňuje původní hodnotu sloupce nazev před úpravou. * NEW. symbolizující „nové“ hodnoty měněného řádku (po přepsání - výsledek dané úpravy). Díky tomu lze tvořit elegantní konstrukce jako např. : NEW. pocet_pristupu = OLD. pocet_pristupu + 1 apod. Časté je též získání právě vytvořeného unikátního klíče záznamu a manipulace se záznamem prostřednictvím jej. Databázové systémy nově vytvořený unikátní klíč většinou zpřístupňují přes klíčové slovo LAST_INSERT_ID, ale například pro vkládání více záznamů (zřetězené seznamy hodnot za klauzulí VALUES) to není možné a trigger je tak jediným prostředkem, který může kýženou manipulaci realizovat.
Manipulace s triggery
Chceme-li trigger smazat, použijeme příkaz: DROP TRIGGER jmeno_triggeru; * Pokud již trigger daného jména existuje a chceme jeho kód změnit, místo CREATE použijeme REPLACE. Některé databázové systémy nicméně nemusejí REPLACE podporovat, a tak je místo toho potřeba trigger smazat a následně ho vytvořit.
Sémantika triggerů
Triggery jako takové jsou definovány ve většině moderních databázových systémů, ovšem mírně se liší v sémantice svého provedení. Klíčové rozdíly jsou zejména v tom, … * kdy přesně se trigger spustí * jak proběhne, resp. +more co ho může přerušit * jakým způsobem se řeší vzájemné volání triggerů * jak (a jestli vůbec) jsou ošetřeny nekonečné zacyklování vzájemně se volajících triggerů.
Externí Odkazy
[url=http://interval. cz/clanky/sql-jak-na-triggery/]SQL - jak na triggery[/url] * [url=http://docplayer. +morecz/37236007-Aktivni-databaze-triggery-tomas-hejl-jiri-kuncar. html]Aktivní databáze, triggery. Tomáš Hejl & Jiří Kunčar[/url] - vysvětlení pojmů a porovnání nejvýznamnějších implementací triggerů (Starburst DB, Oracle, DB2, Chimera, SQL Server) * [url=https://web. archive. org/web/20120425214056/http://www. linuxsoft. cz/article. php. id_article=1019]Mysql (46) - Triggery[/url].