Trigger (databáze)

Technology
12 hours ago
8
4
2
Avatar
Author
Albert Flores

Trigger (č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é.

INSERTPřed vložením nového řádku. Po vložení nového řádku. +more
V příkazu INSERT a druhé části příkazu REPLACE.
UPDATEPřed úpravou existujícího řádku. Po úpravě existujícího řádku.
UPDATEV 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.
DELETEPřed smazáním řádku. Po smazání řádku.
DELETEV 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].

Kategorie:Databáze

5 min read
Share this post:
Like it 8

Leave a Comment

Please, enter your name.
Please, provide a valid email address.
Please, enter your comment.
Enjoy this post? Join Cesko.wiki
Don’t forget to share it
Top