Spouštěč v SQL je procedurální kód, který se automaticky spustí v reakci na určité události v zadané tabulce. Je důležité pochopit, jak tyto malé kódy dělají tak obrovský rozdíl ve výkonu databáze. V tomto článku se dozvíte, jak implementovat spouštěče spolu s příklady.
Tento článek se bude zabývat následujícími tématy:
- Co je to spouštěč?
- Syntaxe a příklad
- Operace v Triggerech
- Výhody a nevýhody
Co je spouštěč?
Spouštěče jsou kódy SQL, které se automaticky spouštějí v reakci na určité události v konkrétní tabulce. Ty se používají k zachování integrity dat. Spouštěč v SQL funguje podobně jako spouštěč v reálném světě. Například, když stisknete spoušť zbraně, vystřelí kulka. Všichni to víme, ale jak to souvisí se spouštěči v SQL? Abychom to pochopili, uvažujme hypotetickou situaci.
Jan je marketingový ředitel ve společnosti. Když jsou do firemní databáze vložena data nového zákazníka, musí každému novému zákazníkovi poslat uvítací zprávu. Pokud je to jeden nebo dva zákazníci, John to může udělat ručně, ale co když je počet více než tisíc? V takovém případě se spouštěče hodí.
Takže nyní může John snadno vytvořit spouštěč, který automaticky odešle uvítací e-mail novým zákazníkům, jakmile budou jejich data vložena do databáze. Doufám tedy, že máte se zavedením Triggers v SQL jasno.
Vždy mějte na paměti, že u jedné tabulky nemohou existovat dva spouštěče s podobným časem akce a událostí. Například pro tabulku nemůžeme mít dva spouštěče BEFORE UPDATE. Ale můžeme mít PŘED AKTUALIZACÍ a PŘED VLOŽENÍM spouštěč nebo PŘED AKTUALIZACÍ a PO AKTUALIZACI spoušť.
Než se blíže ponoříme do základů spouštěčů, doporučil bych vám porozumět pojmům Základy SQL a Normalizace, abyste získali lepší přehled o Triggerech v SQL.
Syntaxe a příklad
Podívejme se nyní na syntaxi spouštěče.
Create Trigger Trigger_Name (Before | After) [ Insert | Update | Delete] on [Table_Name] [ for each row | for each column ] [ trigger_body ]
Nyní mi dovolte rozebrat tuto syntaxi a podrobně vysvětlit každou část.
- Vytvořit spouštěč
Tato dvě klíčová slova se používají k určení, že bude deklarován spouštěcí blok. - Název_spouštěče
Určuje název spouštěče. Název spouštěče musí být jedinečný a neměl by se opakovat. - ( Před | Po )
To určuje, kdy bude spouštěč spuštěn. Říká nám čas, kdy je spouštěč spuštěn, tj. buď před probíhající událostí, nebo po ní.
- Před spuštěním se používají k aktualizaci nebo ověření hodnot záznamů před jejich uložením do databáze.
- Po spuštění se používají k přístupu k hodnotám polí, které jsou nastaveny systémem, ak provádění změn v jiných záznamech. Záznamy, které aktivují spouštěč after, jsou pouze pro čtení. Spouštěč After nemůžeme použít, pokud chceme aktualizovat záznam, protože to povede k chybě pouze pro čtení.
- [ Vložit | Aktualizovat | Smazat ]
Toto jsou operace DML a v daném spouštěči můžeme použít kteroukoli z nich. - na [ Název_tabulky ]
Musíme zmínit název tabulky, na kterou je trigger aplikován. Nezapomeňte použít na klíčové slovo a také se ujistěte, že vybraná tabulka je přítomna v databázi. - [ pro každý řádek | pro každý sloupec ]
-
- Spouštěč na úrovni řádku se provede před nebo za libovolnou hodnotou sloupce v řádku změny
- Spouštění na úrovni sloupce se spustí před nebo za zadaným sloupcem změny
- [ trigger_body]
Skládá se z dotazů, které je třeba provést při volání spouštěče.
Takže tohle všechno bylo o jednoduchém spouštěči. Můžeme ale také vytvořit vnořený spouštěč, který dokáže provádět více procesů. Také manipulace s ním a jeho ukončení ve správný čas je velmi důležité. Pokud neukončíme spoušť správně, může to vést k nekonečné smyčce.
Možná vás zajímá, v jakém scénáři můžeme použít vnořený spouštěč. Spíše než abych vám dával na míru šitou odpověď, dovolte mi s vámi sdílet scénář, který vám pomůže lépe porozumět vnořenému spouštěči. V návaznosti na předchozí scénář John poslal e-mail pro každého nového zákazníka, který byl přidán do databáze společnosti. Co když teď chce mít přehled o počtu zákazníků, kterým byl e-mail odeslán? Nyní potřebuje John vytvořit vnořený spouštěč, aby mohl sledovat počet spolu s odesláním e-mailu.
Takže to bylo vše o syntaxi spouštěčů, zkusme nyní implementovat příklad spouštěčů v SQL.
Příklad pro spouštěč:
V níže uvedeném spouštěči se snažíme vypočítat procento studenta, jakmile budou jeho údaje aktualizovány v databázi.
CREATE TRIGGER sample_trigger before INSERT ON student FOR EACH ROW SET new.total = new.marks/6;
Zde je „NOVINKA“ klíčové slovo odkazuje na řádek, který je ovlivněn.
Operace v Triggerech
Můžeme provádět mnoho operací pomocí spouštěčů. Některé mohou být jednoduché a některé trochu složité, ale jakmile si projdeme dotaz, je snadné ho pochopit.
- SPUŠTĚTE spoušť
DROP TRIGGER trigger name;
- Zobrazit spouštěč
Níže uvedený kód zobrazí všechny přítomné spouštěče.
SHOW TRIGGERS;
Níže uvedený kód zobrazí všechny spouštěče, které jsou přítomny v konkrétní databázi.
SHOW TRIGGERS IN database_name;
Příklad:
SHOW TRIGGERS IN edureka;
Ve výše uvedeném příkladu budou zobrazeny všechny spouštěče, které jsou přítomné v databázi s názvem Edureka.
Také se podíváme na některé hlavní varianty spouštěčů, kterými jsou Před vložením a Po vložení. Spouštěč jsme již viděli v příkladu. Ale s pomocí tabulky se podívejme, jak přesně to funguje.
Jak jsme již pochopili, jak vytvořit spouštěč, nyní porozumíme dvěma variantám spouštěče, kterými jsou Před vložením a Po vložení. abychom je mohli implementovat, vytvořte studentskou tabulku s různými sloupci, jak je uvedeno níže:
CREATE TABLE Student( studentID INT NOT NULL AUTO_INCREMENT, FName VARCHAR(20), LName VARCHAR(20), Address VARCHAR(30), City VARCHAR(15), Marks INT, PRIMARY KEY(studentID) );
Pokud nyní provedeme tento dotaz, dostaneme následující tabulku.
Zkusme použít první variantu, tj. Před vložením
CREATE TRIGGER calculate before INSERT ON student FOR EACH ROW SET new.marks = new.marks+100;
Když zde automaticky vložíme data do tabulky studentů, spustí se spouštěč. Spouštěč přidá 100 do sloupce známek do sloupce student.
Nyní použijeme druhou variantu, tj. Po Vložit
Pro použití této varianty potřebujeme ještě jednu tabulku, tj. Procento, kam spouštěč uloží výsledky. Pomocí níže uvedeného kódu vytvořte tabulku procent.
create table Final_mark( per int );
Nyní použijeme spouštěč po vložení
CREATE TRIGGER total_mark after insert ON student FOR EACH ROW insert into Final_mark values(new.marks);
Když vkládáme data do tabulky, spustí total_mark uloží výsledek do tabulky Final_mark.
To bylo vše o operaci se spouštěči, pojďme nyní kupředu a podívejme se na její výhody a nevýhody.
Výhody a nevýhody spouštěčů
Výhody
- Vynucení zabezpečení schválení na stole, která jsou přítomna v databázi
- Spouštěče poskytují další způsob, jak zkontrolovat integritu dat
- Odpor je neplatný výměn
- Spouštěče ošetřují chyby z databázové vrstvy
- Normálně mohou být spouštěče užitečné pro kontrolu dat změny v tabulkách
- Spouštěče poskytují alternativní způsob spouštění splánovaných úloh . Při použití spouštěčů nemusíme čekat na spuštění naplánovaných událostí, protože spouštěče se vyvolávají automaticky před nebo po provedení změny dat v tabulce
Nevýhoda s
- Spouštěče mohou poskytovat pouze rozšířené ověření , tedy ne všechny druhy validací. Pro jednoduché ověření můžete použít omezení NOT NULL, UNIQUE, CHECK a FOREIGN KEY
- Spouštěče mohou zvýšit režii databáze
- Spouštěče může být obtížnéodstraňovat protože se spouštějí automaticky v databázi, což nemusí být pro klientské aplikace neviditelné
To nás přivádí na konec tohoto článku Triggers in SQL. Doufám, že jste pochopili koncepty Triggers.
Pokud se chcete dozvědět více o MySQL a poznat tuto relační databázi s otevřeným zdrojovým kódem, podívejte se na naše certifikační školení MySQL DBA, které je součástí živého školení pod vedením instruktora a skutečného - životní zkušenosti s projektem. Toto školení vám pomůže porozumět MySQL do hloubky a pomůže vám dosáhnout zvládnutí tohoto předmětu.
Máte na nás otázku? Uveďte to prosím v sekci komentářů tohoto Spouštěče v SQL a my se vám ozveme.