GNU/Linux >> Znalost Linux >  >> Cent OS

Jak používat spouštěče MySQL

Úvod

Spouštěče MySQL aplikují omezení na tabulky při přidávání, aktualizaci nebo odstraňování řádků tabulky.

Sloupce v MySQL uplatňují mírná omezení hodnot. Například nastavení datového typu sloupce jako tiny int a není null vyžaduje zadání malé číselné hodnoty. K zachování integrity dat je však zapotřebí více omezení.

Tento výukový program vám ukáže, jak používat spouštěče MySQL, a poskytuje příklady pro každý typ spouštěčů.

Předpoklady

  • Systém běžící na databázovém serveru MySQL
  • Uživatelský účet MySQL s oprávněními root
  • Znalost základních příkazů MySQL (viz naše cheaty pro příkazy MySQL ke stažení)

Co je spouštěč v MySQL?

Spouštěč je pojmenovaný objekt MySQL, který se aktivuje, když v tabulce nastane událost. Spouštěče jsou konkrétní typ uložené procedury přidružené ke konkrétní tabulce.

Spouštěče umožňují přístup k hodnotám z tabulky pro účely porovnání pomocí NEW a OLD . Dostupnost modifikátorů závisí na spouštěcí události, kterou používáte:

Událost spuštění STARÉ NOVINKA
INSERT Ne Ano
AKTUALIZACE Ano Ano
SMAZAT Ano Ne

Kontrola nebo úprava hodnoty při pokusu o vložení dat způsobí, že NEW.<column name> dostupný modifikátor. Je to proto, že tabulka je aktualizována novým obsahem. Naproti tomu OLD.<column name> hodnota pro příkaz insert neexistuje, protože na jejím místě předem neexistuje žádná informace.

Při aktualizaci řádku tabulky jsou k dispozici oba modifikátory. Je zde OLD.<column name> data, která chceme aktualizovat na NEW.<column name> data.

Nakonec, když odebíráte řádek dat, OLD.<column name> modifikátor přistupuje k odstraněné hodnotě. NEW.<column name> neexistuje, protože po odstranění nic nenahrazuje starou hodnotu.

Příklad spouštění MySQL

Jako příklad aplikovaného spouštěče lze uvést vložení nových hodnot do tabulky person poskytuje jiný výsledek než původní vstup:

Všimněte si, že vložená jména byla zpočátku malá. Při výběru tabulky se první písmeno zobrazí jako velké. Přestože neexistuje žádný náznak, že by se něco odlišovalo od běžného příkazu insert, spouštěč se spustil před příkazem insert pro velké první písmeno jména.

Použití spouštěčů MySQL

Každý trigger spojený s tabulkou má jedinečný název a funkci založenou na dvou faktorech:

1. Čas . BEFORE nebo AFTER konkrétní událost řádku.

2. Událost . INSERT , UPDATE nebo DELETE .

MySQL spouští spouštění v závislosti na době aktivace a události pro celkem šest jedinečných kombinací spouštěčů. Příkazy before pomáhají kontrolovat data a provádět změny před přijetím závazků, zatímco příkazy after nejprve potvrzují data a poté provádějí příkazy.

Provedení sady akcí se děje automaticky a ovlivní všechny vložené, odstraněné nebo aktualizované řádky v příkazu.

Vytvořit spouštěče

Použijte CREATE TRIGGER syntaxe příkazu k vytvoření nového spouštěče:

CREATE TRIGGER <trigger name> <trigger time > <trigger event>
ON <table name>
FOR EACH ROW
<trigger body>;

Osvědčeným postupem je pojmenovat spouštěč následujícími informacemi:

<trigger time>_<table name>_<trigger event>

Například pokud se spouštěč spustí před vložením na stole s názvem zaměstnanec , nejlepší konvencí je volat spouštěč:

before_employee_insert

Případně je běžnou praxí použít následující formát:

<table name>_<first letter of trigger time><first letter of trigger name>

před vložením název spouštěče pro tabulku zaměstnanec vypadá takto:

employee_bi

Spouštěč se spustí v určitý čas události v tabulce definované pomocí pro každý řádek ovlivněný funkcí.

Smazat spouštěče

Chcete-li spouštěč odstranit, použijte DROP TRIGGER prohlášení:

DROP TRIGGER <trigger name>;

Případně použijte:

DROP TRIGGER IF EXISTS <trigger name>;

Chybová zpráva se nezobrazuje, protože neexistuje žádný spouštěč, takže se nevytiskne žádné varování.

Vytvořit ukázkovou databázi

Vytvořte databázi pro ukázkové kódy spouštěče s následující strukturou:

1. Vytvořte tabulku s názvem osoba s jménem a věk pro sloupce.

CREATE TABLE person (name varchar(45), age int);

Vložte ukázková data do tabulky:

INSERT INTO person VALUES ('Matthew', 25), ('Mark', 20);

Výběrem tabulky zobrazíte výsledek:

SELECT * FROM person;

2. Vytvořte tabulku s názvem průměrný_věk se sloupcem nazvaným průměr :

CREATE TABLE average_age (average double);

Do tabulky vložte hodnotu průměrného věku:

INSERT INTO average_age SELECT AVG(age) FROM person;

Výběrem tabulky zobrazíte výsledek:

SELECT * FROM average_age;

3. Vytvořte tabulku s názvem archiv_osob s jménem , věk a čas sloupce:

CREATE TABLE person_archive (
name varchar(45),
age int,
time timestamp DEFAULT NOW());

Vytvořte spouštěč PŘED VLOŽENÍM

Chcete-li vytvořit BEFORE INSERT spoušť, použijte:

CREATE TRIGGER <trigger name> BEFORE INSERT
ON <table name>
FOR EACH ROW
<trigger body>;

BEFORE INSERT trigger poskytuje kontrolu nad modifikací dat před potvrzením do databázové tabulky. Kapitalizace názvů pro konzistenci, kontrola délky vstupu nebo zachycení chybných vstupů pomocí BEFORE INSERT triggery dále poskytují omezení hodnot před zadáním nových dat.

PŘED INSERT Příklad spouštěče

Vytvořte BEFORE INSERT spouštěč pro kontrolu hodnoty věku před vložením dat do osoby tabulka:

delimiter //
CREATE TRIGGER person_bi BEFORE INSERT
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50001' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ;

Vložením dat se aktivuje spouštěč a zkontroluje se hodnota věku před odesláním informace:

INSERT INTO person VALUES ('John', 14);

Konzola zobrazí popisnou chybovou zprávu. Data se do tabulky nevloží z důvodu neúspěšné kontroly spouštěče.

Vytvořte spouštěč PO INSERT

Vytvořte AFTER INSERT spusťte pomocí:

CREATE TRIGGER <trigger name> AFTER INSERT
ON <table name>
FOR EACH ROW
<trigger body>;

AFTER INSERT trigger je užitečný, když zadaný řádek generuje hodnotu potřebnou k aktualizaci jiné tabulky.

PO VLOŽENÍ Příklad spouštěče

Vložení nového řádku do osoby tabulka automaticky neaktualizuje průměr v průměrném_věku stůl. Vytvořte AFTER INSERT spustit u osoby pro aktualizaci average_age tabulka po vložení:

delimiter //
CREATE TRIGGER person_ai AFTER INSERT
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ;

Vložení nového řádku do osoby tabulka aktivuje spouštěč:

INSERT INTO person VALUES ('John', 19);

Data se úspěšně odevzdají osobě tabulku a aktualizuje průměrný_věk tabulka se správnou průměrnou hodnotou.

Vytvořte spouštěč PŘED AKTUALIZACÍ

Proveďte BEFORE UPDATE spusťte pomocí:

CREATE TRIGGER <trigger name> BEFORE UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;

BEFORE UPDATE spouštěče jsou spolu s BEFORE INSERT spouštěče. Pokud před vložením dat existují nějaká omezení, měla by zde být také před aktualizací.

PŘED AKTUALIZACÍ Příklad spouštěče

Pokud existuje věkové omezení pro osobu před vložením dat, věkové omezení by mělo existovat také před aktualizací informací. Bez BEFORE UPDATE spoušť, spoušti kontroly věku se lze snadno vyhnout. Nic neomezuje úpravy na chybnou hodnotu.

Přidejte BEFORE UPDATE spustit na osobu tabulka se stejným tělem jako BEFORE INSERT spoušť:

delimiter //
CREATE TRIGGER person_bu BEFORE UPDATE
ON person
FOR EACH ROW
IF NEW.age < 18 THEN
SIGNAL SQLSTATE '50002' SET MESSAGE_TEXT = 'Person must be older than 18.';
END IF; //
delimiter ;

Aktualizace existující hodnoty aktivuje kontrolu spouštění:

UPDATE person SET age = 17 WHERE name = 'John';

Aktualizace věku na hodnotu menší než 18 zobrazí chybovou zprávu a informace se neaktualizují.

Vytvořte spouštěč PO AKTUALIZACI

Pomocí následujícího bloku kódu vytvořte AFTER UPDATE spoušť:

CREATE TRIGGER <trigger name> AFTER UPDATE
ON <table name>
FOR EACH ROW
<trigger body>;

AFTER UPDATE trigger pomáhá sledovat potvrzené změny dat. Nejčastěji k jakýmkoli změnám po vložení informací dojde také po aktualizaci dat.

PO AKTUALIZACI Příklad spouštěče

Všechny úspěšné aktualizace věku údaje v tabulce osoba měli také aktualizovat střední průměrnou hodnotu vypočítanou v průměrném_věku tabulka.

Vytvořte AFTER UPDATE spustí aktualizaci průměrného_věku tabulky po aktualizaci řádku v osobě tabulka:

delimiter //
CREATE TRIGGER person_au AFTER UPDATE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(age) FROM person); //
delimiter ;

Aktualizace existujících dat změní hodnotu v osobě tabulka:

UPDATE person SET age = 21 WHERE name = 'John';

Aktualizace tabulky osoba také aktualizuje průměr v průměrném_věku tabulka.

Vytvořte spouštěč PŘED ODSTRANĚNÍM

Chcete-li vytvořit BEFORE DELETE spoušť, použijte:

CREATE TRIGGER <trigger name> BEFORE DELETE
ON <table name>
FOR EACH ROW
<trigger body>;

BEFORE DELETE spoušť je nezbytná z bezpečnostních důvodů. Pokud má nadřazená tabulka připojené nějaké potomky, spouštěč pomáhá zablokovat odstranění a zabrání osamoceným tabulkám. Spouštěč také umožňuje archivaci dat před vymazáním.

PŘED DELETE Příklad spouštěče

Archivujte smazaná data vytvořením BEFORE DELETE spoušť na stole osoba a vložte hodnoty do archivu_osob tabulka:

delimiter //
CREATE TRIGGER person_bd BEFORE DELETE
ON person
FOR EACH ROW
INSERT INTO person_archive (name, age)
VALUES (OLD.name, OLD.age); //
delimiter ;

Mazání dat z tabulky osoba archivuje data do archivu_osob tabulky před odstraněním:

DELETE FROM person WHERE name = 'John';

Vložení hodnoty zpět do osoby tabulka uchovává protokol smazaných dat v archivu_osob tabulka:

INSERT INTO person VALUES ('John', 21);

BEFORE DELETE trigger je užitečný pro protokolování jakýchkoli pokusů o změnu tabulky.

Vytvořte spouštěč PO DELETE

Proveďte AFTER DELETE spusťte pomocí:

CREATE TRIGGER <trigger name> AFTER DELETE
ON <table name>
FOR EACH ROW
<trigger body>;

AFTER DELETE spouštěče udržují aktualizace informací, které vyžadují, aby před provedením aktualizací zmizel datový řádek.

PO DELETE Příklad spouštěče

Vytvořte AFTER DELETE spoušť na stole osoba aktualizujte průměrný_věk tabulka s novými informacemi:

delimiter //
CREATE TRIGGER person_ad AFTER DELETE
ON person
FOR EACH ROW
UPDATE average_age SET average = (SELECT AVG(person.age) FROM person); //
delimiter ;

Smazání záznamu z tabulky osoba aktualizuje průměrný_věk tabulka s novým průměrem:

Bez AFTER DELETE informace se automaticky neaktualizují.

Vytvořit více spouštěčů

MySQL nepodporuje spouštění více triggerů současně. Přidání více logických operací ke stejnému spouštěči je však možné. Použijte BEGIN a END oddělovače pro označení těla spouště:

CREATE TRIGGER <trigger name> <trigger time > <trigger event>
ON <table name>
FOR EACH ROW
BEGIN
<trigger body>;
END;

Před vytvořením spouštěče s více operacemi nezapomeňte změnit výchozí oddělovač.

Zobrazit spouštěče

Seznam všech spouštěčů v databázi pomocí:

SHOW triggers;

Výstup zobrazuje seznam všech spouštěčů, včetně názvu a obsahu příkazu:

Zobrazí se také další informace, jako je čas vytvoření a uživatel, který spouštěč vytvořil.


Cent OS
  1. Jak používat phpMyAdmin ke kopírování databáze MySQL

  2. Jak používat sůl na Centos 8

  3. Jak opravit poškozenou tabulku databáze MySQL

  1. Jak vytvořit databázi MySQL v Workbench

  2. Jak vytvořit tabulku v MySQL

  3. Jak nainstalovat a používat MySQL na Ubuntu 20.04

  1. Jak opravit databázi MySQL

  2. Jak používat MySQL SHOW TRIGGERS

  3. Jak nainstalovat MySQL na CentOS 8