V tomto článku se na příkladu seznámíme s konceptem triggeru v SQL a jeho implementací.
Spouštěč ve strukturovaném dotazovacím jazyce je sada procedurálních příkazů prováděných automaticky, když existuje jakákoli zpětná vazba k určitým událostem v tabulce v databázi. Spouštěče se používají k ochraně integrity dat v databázi.
Podívejme se na následující situaci, abychom pochopili koncept triggeru v SQL:
Předpokládejme, že Supriya je manažerem informačních technologií v nadnárodní společnosti. Když je záznam nového zaměstnance vložen do databáze, musí každému novému zaměstnanci poslat zprávu „Gratulujeme“. Pokud je pět nebo šest zaměstnanců, Supriya to může udělat ručně, ale pokud je počet nových zaměstnanců větší než tisíc, pak v takovém stavu musí použít spoušť v databázi.
Supriya tedy musí v tabulce vytvořit spouštěč, který automaticky odešle zprávu „Gratulujeme“ novým zaměstnancům, jakmile bude jejich záznam vložen do databáze.
Spouštěč se vždy provede s konkrétní tabulkou v databázi. Pokud tabulku odstraníme, automaticky se odstraní i všechny spouštěče přidružené k této tabulce.
Spouštěče ve strukturovaném dotazovacím jazyce jsou volány pouze předtím, než k událostem došlo, nebo až k nim došlo.
Pouze tři události nastanou ve spouštěči před událostmi nebo po nich, a to události Insert, Události Update nebo Delete.
1. VLOŽTE událost :Událost Insert nastane vždy, když je do tabulky vložen nový záznam.
2. AKTUALIZOVAT událost :Událost aktualizace nastane při každé aktualizaci existujících záznamů v tabulce.
3. SMAZAT událost: K události Delete dojde při každém odstranění záznamu z tabulky.
Typy spouštěčů ve strukturovaném dotazovacím jazyce
Následuje šest typů spouštěčů používaných ve strukturovaném dotazovacím jazyce:
1. PO VLOŽENÍ Spouštěče:
Spouštěč po vložení se v SQL vyvolá po vložení záznamů do tabulky.
2. PO AKTUALIZACI Spouštěče:
Spouštěč po aktualizaci se v SQL vyvolá po aktualizaci existujících záznamů v tabulce.
3. PO VYMAZÁNÍ Spouštěč:
Aktivační událost after delete je v SQL vyvolána po odstranění záznamu z tabulky.
4. PŘED VLOŽENÍM Spouštěče:
Spouštěč před vložením se v SQL vyvolá před vložením záznamů do tabulky.
5. PŘED AKTUALIZACÍ Spouštěče:
Aktivační událost před aktualizací je v SQL vyvolána před aktualizací existujících záznamů v tabulce.
6. PŘED SMAZÁNÍM Spouštěč:
Aktivační událost před odstraněním se v SQL vyvolá před odstraněním záznamu z tabulky.
Syntaxe spouštěče v SQL:
CREATE TRIGGER Trigger_Name
[BEFORE | AFTER] [Insert | Update | Delete]
ON [Table_Name]
[FOR EACH ROW | FOR EACH COLUMN]
AS
Set of SQL Statement
- V syntaxi spouštěče musíme definovat název spouštěče hned za klíčovým slovem CREATE TRIGGER v syntaxi.
- Za názvem spouštěče musíme definovat, který spouštěč chceme vyvolat, klíčové slovo spouštěče před nebo po spouštěči s názvem události.
- Pak musíme zmínit název tabulky, u které došlo ke spuštění.
- Za názvem tabulky musíme definovat spouštěč na úrovni řádku nebo sloupce.
- A nakonec musíme napsat příkaz SQL, který se bude chovat podle událostí.
Příklad spouštěče v SQL
Abychom porozuměli konceptu triggeru v SQL, musíme vytvořit tabulku, na které má být trigger spuštěn.
Následující dotaz vytvoří tabulku Student v databázi SQL.
CREATE TABLE Student(
Student_rollno INT NOT NULL PRIMARY KEY,
FirstName varchar(40),
English_Marks INT,
Physics_Marks INT,
Chemistry_Marks INT,
Biology_Marks INT,
Maths_Marks INT,
Total_Marks INT,
Percentage INT);
Následující dotaz ukazuje strukturu tabulky Student:
DESC Student;
Pole | Typ | NULL | Klíč | Výchozí | Navíc |
Student_RollNo | INT | NE | PRI | NULL | |
Jméno | Varchar(40) | ANO | NULL | ||
English_Marks | INT | ANO | NULL | ||
Fyzikální_značky | INT | ANO | NULL | ||
Chemistry_Marks | INT | ANO | NULL | ||
Biology_Marks | INT | ANO | NULL | ||
Maths_Marks | INT | ANO | NULL | ||
Total_Marks | INT | ANO | NULL | ||
Procento | INT | ANO | NULL |
Následující dotaz spustí spouštěč před vložením záznamu studenta do tabulky:
CREATE TRIGGER Student _Marks
BEFORE INSERT
ON
Student
FOR EACH ROW
SET new.Total_Marks = new.English_Marks + new.Physics_Marks + new.Chemistry_Marks + new.Biology_Marks + new.Maths_Marks,
new.Percentage = ( new.Total_Marks / 500) * 100;
Následující dotazy vloží záznam do tabulky Student.
INSERT INTO Student (Student_RollNo, First_Name, English_Marks, Physics_Marks, Chemistry_Marks,Biology_Marks, Maths_Marks, Total_Marks, Percentage) VALUES ( 1, ‘Raman’, 90, 80, 75, 70 ,92, 0, 0);
Chcete-li zkontrolovat výstup výše uvedeného příkazu INSERT, musíte zadat následující příkaz SELECT:
SELECT * FROM Student
Výstup:
Student_RollNo | Jméno | Anglické_značky | Fyzikální_značky | Chemistry_Marks | Biologické_značky | Maths_Marks | Total_Marks | Procento |
1 | Raman | 90 | 80 | 75 | 70 | 92 | 407 | 81 |
Výhody spouštěčů v SQL
Níže jsou uvedeny tři hlavní výhody spouštěčů ve strukturovaném dotazovacím jazyce:
- SQL poskytuje alternativní způsob, jak udržovat data a referenční integritu v tabulkách.
- Spouštěče pomáhají při automatickém provádění naplánovaných úloh.
- Zachycují chyby v databázové vrstvě různých podniků.
- Umožňují uživatelům databáze ověřit hodnoty před vložením a aktualizací.
Nevýhody spouštěčů v SQL
Níže jsou uvedeny hlavní nevýhody spouštěčů ve strukturovaném dotazovacím jazyce:
- Nejsou zkompilované.
- Není možné najít a ladit chyby ve spouštěčích.
- Pokud ve spouštěči použijeme složitý kód, zpomalí to běh aplikace.
- Trigger zvyšuje vysoké zatížení databázového systému.