|
||||||||||||||||||||||||||||||||||||||||||||||||||
Menu
Distributions (131)
Software (10844)
|
MySQL (47) - Triggery a praxeS prstem na spoušti spouštíme spouště, aneb MySQL, triggery a praxe.
V minulém dílu jsme si řekli dost o teorii triggerů, takže je čas podívat se na to, jak je můžeme v MySQL použít v praxi. Na jednu stranu to bude trochu smutné čtení, protože MySQL triggery zdaleka neumějí to, co triggery třebas ve Firebirdu. Na druhou stranu je ale i tak život se spouštěmi veselejší než bez nich.
Triggery v praxiUvedli jsme, že triggery mohou přispívat k bezpečnosti dat a že jedním z příkladů může být "bezpečné" mazání řádků v tabulce. Bezpečné proto, že záznam není vymazán úplně, ale data jsou přesunuta do jiné tabulky, takže je později lze dohledat. Pokud tedy budeme mít následující tabulku: create table bezpecna
(id int not null auto_increment, jmeno varchar( 50 ) not null, plat
decimal(12,4) not null, primary key (id)) type = myisam;
S testovacími daty: insert into bezpecna
(jmeno, plat) values ('Jarda', 12000);
můžeme chtít místo mazání z této tabulky data přesunout do "záložní" tabulky s tím, že si zároveň poznamenáme, kdo a kdy ta původní data promazával. Něco takového zcela určitě můžeme svěřit triggeru. Vytvoříme si tabulku, která bude obsahovat data z původní tabulky a ještě údaj o "mazajícím" uživateli a čase, kdy se řádky odstraňovaly: create table
bezpecna_zaloha like bezpecna;
a konečně, vytvoříme trigger, který při odstraňování dat ta původní data uchová v tabulkce bezpecna_zaloha: create trigger
trSaveRows
Jaký je význam toho všeho? Výsledek spočívá v tom, že když se nyní pokusíte odstranit nějaká ta data z tabulky bezpecna, tak... vyzkoušejte postupně tyto příkazy: delete from bezpecna
where id > 2;
Jak vidíte, smazaná data se objeví v tabulkce bezpecna_zaloha. K tomu všemu bude
jistě vhodné uvést pár poznámek:
K příkladu ještě jedno varování: Trigger se NESPUSTÍ při použití
příkazu TRUNCATE TABLE. To není chyba, ale vlastnost DMBS, takže pokud
se spoléháte na nějakou akci, která se spustí při odstraňování dat z
tabulky, buďte opatrní. Při použití DELETE FROM TABLE se však trigger
spustí a zpracuje všechny řádky, které ještě v nebohé tabulce zbývají. Triggery jako kontrola datDalší typickou činností triggerů je kontrola měněných dat. Mělo by tedy jít například napsat trigger, který do naší tabulky zakáže vkládat platy vyšší než 30000,- Kč. Vypadal by nějak takhle: create trigger trMaxPlat
Bohužel, v době psaní tohoto článku je prakticky nemožné vyhodit nějakou smysluplnou chybu z triggeru, a to jejich použití pro kontrolu dat téměř znemožňuje. Pro informaci se můžete podívat do diskuse k tomuto tématu. Manuál doporučuje pro takový případ "uměle" vytvořit například chybu porušení primárního klíče, podle mě je to však jen chabá náplast. Problém je reportován do buglistu (sem a sem), tak uvidíme, co s tím bude vývojářský tým dělat.
|
Search Software
Search Google
|
||||||||||||||||||||||||||||||||||||||||||||||||
©Pavel Kysilka - 2003-2024 | maillinuxsoft.cz | Design: www.megadesign.cz |