Trigger (databáze): Porovnání verzí

Smazaný obsah Přidaný obsah
m typograficky poupraveno a přidána noticka o neplatnosti odkazu
Bez shrnutí editace
značky: možný vandalismus editace z Vizuálního editoru
Řádek 25:
|rowspan=2| '''UPDATE''' || Před úpravou existujícího řádku. || Po úpravě existujícího řádku.
|-
| colspan="2" |
|colspan=2| V příkazu <tt>[[UPDATE]]</tt> nebo v druhé části příkazu <tt>[[INSERT#…ON DUPLICATE KEY|INSERT … ON DUPLICATE KEY UPDATE]]</tt>.
|-
|rowspan=2| '''DELETE''' || Před smazáním řádku. || Po smazání řádku.
|-
| colspan="2" |
|colspan=2| V příkazu <tt>[[DELETE]]</tt> nebo první části příkazu <tt>REPLACE</tt>, kdy je nalezen záznam se stejným primárním klíčem, jejž <tt>REPLACE</tt> maže.<br />Příkazy <tt>[[DROP|DROP TABLE]]</tt> ani <tt>[[TRUNCATE|TRUNCATE TABLE]]</tt> trigger nespouštějí, protože nedochází k doslovnému mazání jednotlivých záznamů.
|}
 
Řádek 35:
Uvnitř kódu triggeru lze použít dva speciální prefixy, platící jenom v&nbsp;něm a&nbsp;nikde jinde. Jsou to:
* <tt>OLD.</tt> symbolizující „staré“ hodnoty měněného řádku (před přepsáním). Například <tt>OLD.nazev</tt> tak zpřístupňuje původní hodnotu sloupce <tt>nazev</tt> před úpravou.
* <tt>NEW.</tt> 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ř.: <tt>NEW.pocet_pristupu = OLD.pocet_pristupu + 1</tt> apod. Časté je též získání právě vytvořeného unikátního„novnikátního klíče záznamu a&nbsp;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 [[INSERT#LAST INSERT ID|LAST_INSERT_ID]], ale například pro vkládání více záznamů (zřetězené seznamy hodnot za klauzulí <tt>VALUES</tt>) to není možné a&nbsp;trigger je tak jediným prostředkem, který může kýženou manipulaci realizovat.
 
== Manipulace s&nbsp;triggery ==
* Chceme-li trigger smazat, použijeme příkaz: <tt>DROP TRIGGER jmeno_triggeru;</tt>
* Pokud již trigger daného jména existuje a&nbsp;chceme jeho kód změnit, místo <tt>CREATE</tt> použijeme <tt>REPLACE</tt>. Některé databázové systémy nicméně nemusejí <tt>REPLACE</tt> podporovat, a&nbsp;tak je místo toho potřeba trigger smazat a&nbsp;následněnásl) hojsou vytvořit.ošetřeny [[Deadlock|nekonečné zacyklování]] vzájemně se volajících triggerů
 
== Sémantika triggerů ==
Triggery jako takové jsou definovány ve většině moderních [[databáze|databázových systémů]], ovšem mírně se liší v&nbsp;[[sémantika|sémantice]] svého provedení.
Klíčové rozdíly jsou zejména v&nbsp;tom, …
* kdy přesně se trigger spustí
* jak proběhne, resp. co ho může přerušit
* jakým způsobem se řeší vzájemné volání triggerů
* jak (a&nbsp;jestli vůbec) jsou ošetřeny [[Deadlock|nekonečné zacyklování]] vzájemně se volajících triggerů
 
== Externí Odkazy ==