Wyzwalacz w SQL to kod proceduralny, który jest automatycznie wykonywany w odpowiedzi na określone zdarzenia w określonej tabeli. Ważne jest, aby zrozumieć, w jaki sposób te małe kody powodują tak ogromną różnicę w wydajności bazy danych. W tym artykule dowiesz się, jak zaimplementować wyzwalacze wraz z przykładami.
W tym artykule zostaną omówione następujące tematy:
- Co to jest wyzwalacz?
- Składnia i przykład
- Operacja w wyzwalaczach
- Zaleta i wada
Co to jest wyzwalacz?
Wyzwalacze to kody SQL, które są automatycznie wykonywane w odpowiedzi na określone zdarzenia w określonej tabeli. Służą one do zachowania integralności danych. Wyzwalacz w SQL działa podobnie do wyzwalacza w świecie rzeczywistym. Na przykład, gdy spust pistoletu jest pociągnięty, wystrzeliwany jest pocisk. Wszyscy to wiemy, ale jak to się ma do wyzwalaczy w SQL? Aby to zrozumieć, rozważmy hipotetyczną sytuację.
Jan jest dyrektorem ds. marketingu w firmie. Po wprowadzeniu danych nowego klienta do bazy danych firmy, musi wysłać wiadomość powitalną do każdego nowego klienta. Jeśli jest jeden lub dwóch klientów Jan może to zrobić ręcznie, ale co jeśli liczba jest większa niż tysiąc? Cóż, w takim scenariuszu przydają się wyzwalacze.
Dzięki temu John może teraz łatwo utworzyć wyzwalacz, który automatycznie wyśle powitalną wiadomość e-mail do nowych klientów po wprowadzeniu ich danych do bazy danych. Mam więc nadzieję, że wszystko jasne w kwestii wprowadzenia wyzwalaczy w SQL.
Zawsze pamiętaj, że nie mogą istnieć dwa wyzwalacze o podobnym czasie działania i zdarzeniu dla jednej tabeli. Na przykład nie możemy mieć dwóch wyzwalaczy BEFORE UPDATE dla tabeli. Ale możemy mieć PRZED AKTUALIZACJĄ i PRZED WSTAWIENIEM wyzwalacz lub PRZED AKTUALIZACJĄ i PO AKTUALIZACJI wyzwalacz.
Zanim zagłębimy się w podstawy wyzwalaczy, sugerowałbym zrozumienie koncepcji podstaw i normalizacji SQL, aby lepiej zrozumieć wyzwalacze w SQL.
>Składnia i przykład
Przyjrzyjmy się teraz składni wyzwalacza.
Create Trigger Trigger_Name (Before | After) [ Insert | Update | Delete] on [Table_Name] [ for each row | for each column ] [ trigger_body ]
Teraz podzielę tę składnię i szczegółowo wyjaśnię każdą część.
- Utwórz wyzwalacz
Te dwa słowa kluczowe są używane do określenia, że blok wyzwalający ma zostać zadeklarowany. - Nazwa_wyzwalacza
Określa nazwę wyzwalacza. Nazwa wyzwalacza musi być unikalna i nie powinna się powtarzać. - ( Przed | Po )
Określa, kiedy wyzwalacz zostanie wykonany. Informuje nas o czasie, w którym wyzwalacz jest inicjowany, tj. przed trwającym wydarzeniem lub po.
- Przed aktywatorami służą do aktualizacji lub weryfikacji wartości rekordów przed ich zapisaniem w bazie danych.
- Po aktywatorach służą do uzyskiwania dostępu do wartości pól ustawionych przez system oraz do wprowadzania zmian w innych rekordach. Rekordy, które aktywują wyzwalacz po, są tylko do odczytu. Nie możemy użyć wyzwalacza After, jeśli chcemy zaktualizować rekord, ponieważ doprowadzi to do błędu tylko do odczytu.
- [ Wstaw | Aktualizacja | Usuń ]
To są operacje DML i możemy użyć dowolnej z nich w danym wyzwalaczu. - na [ Nazwa_tabeli ]
Musimy wspomnieć o nazwie tabeli, w której stosowany jest wyzwalacz. Nie zapomnij użyć na słowa kluczowego, a także upewnij się, że wybrana tabela jest obecna w bazie danych. - [ dla każdego wiersza | dla każdej kolumny ]
-
- Wyzwalacz na poziomie wiersza jest wykonywany przed lub po dowolnej wartości kolumny wiersza zmiany
- Wyzwalacz poziomu kolumny jest wykonywany przed lub po określonej kolumnie zmiany
- [ trigger_body]
Składa się z zapytań, które muszą zostać wykonane po wywołaniu wyzwalacza.
Więc chodziło o prosty wyzwalacz. Ale możemy również utworzyć zagnieżdżony wyzwalacz, który może wykonywać wiele procesów. Bardzo ważne jest również zajęcie się nim i zakończenie go w odpowiednim czasie. Jeśli nie zakończymy prawidłowo wyzwalacza, może to doprowadzić do nieskończonej pętli.
Możesz się zastanawiać, w jakim scenariuszu możemy użyć zagnieżdżonego wyzwalacza. Zamiast dawać ci dostosowaną odpowiedź, pozwól, że podzielę się z tobą scenariuszem, który pomoże ci lepiej zrozumieć zagnieżdżony wyzwalacz. Kontynuując wcześniejszy scenariusz, John wysłał wiadomość e-mail do każdego nowego klienta, który został dodany do bazy danych firmy. A co, jeśli chce śledzić liczbę klientów, do których wysłano wiadomość e-mail? Teraz John musi utworzyć zagnieżdżony wyzwalacz, aby śledzić liczbę wraz z wysyłaniem wiadomości e-mail.
Więc chodziło o składnię wyzwalaczy, spróbujmy teraz zaimplementować przykład wyzwalaczy w SQL.
Przykład wyzwalacza:
W poniższym wyzwalaczu próbujemy obliczyć procent ucznia, gdy tylko jego dane zostaną zaktualizowane w bazie danych.
CREATE TRIGGER sample_trigger before INSERT ON student FOR EACH ROW SET new.total = new.marks/6;
Oto „NOWOŚĆ” słowo kluczowe odnosi się do wiersza, na który ma to wpływ.
Operacje w wyzwalaczach
Możemy wykonać wiele operacji za pomocą wyzwalaczy. Niektóre mogą być proste, a inne nieco skomplikowane, ale gdy przejdziemy przez zapytanie, łatwo je zrozumieć.
- UPUŚĆ Spust
DROP TRIGGER trigger name;
- Wyświetl wyzwalacz
Poniższy kod wyświetli wszystkie obecne wyzwalacze.
SHOW TRIGGERS;
Poniższy kod wyświetli wszystkie wyzwalacze obecne w określonej bazie danych.
SHOW TRIGGERS IN database_name;
Przykład:
SHOW TRIGGERS IN edureka;
W powyższym przykładzie zostaną wyświetlone wszystkie wyzwalacze obecne w bazie danych o nazwie Edureka.
Przyglądamy się również niektórym głównym wariantom wyzwalaczy, czyli Przed wstawieniem i Po wstawieniu. W przykładzie widzieliśmy już wyzwalacz. Ale z pomocą tabeli zobaczmy, jak dokładnie to działa.
Ponieważ zrozumieliśmy już, jak utworzyć wyzwalacz, teraz przyjrzyjmy się dwóm wariantom wyzwalacza, czyli Przed wstawieniem i Po wstawieniu. aby je wdrożyć, stwórzmy tabelę uczniów z różnymi kolumnami, jak pokazano poniżej:
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) );
Teraz, jeśli wykonamy to zapytanie, otrzymamy poniższą tabelę.
Spróbujmy użyć pierwszego wariantu, tj. Przed wstawieniem
CREATE TRIGGER calculate before INSERT ON student FOR EACH ROW SET new.marks = new.marks+100;
Tutaj, gdy automatycznie wstawimy dane do tabeli uczniów, wyzwalacz zostanie wywołany. Wyzwalacz doda 100 do kolumny ocen w kolumnie ucznia.
Teraz użyjmy drugiego wariantu, tj. Po Wstaw
Aby użyć tego wariantu, potrzebujemy jeszcze jednej tabeli, tj. Procent, w której wyzwalacz będzie przechowywać wyniki. Użyj poniższego kodu, aby utworzyć tabelę procentową.
create table Final_mark( per int );
Teraz użyjmy wyzwalacza po wstawieniu
CREATE TRIGGER total_mark after insert ON student FOR EACH ROW insert into Final_mark values(new.marks);
Tutaj, gdy wstawiamy dane do tabeli, total_mark wyzwalacz zapisze wynik w tabeli Final_mark.
To wszystko dotyczyło operacji na wyzwalaczach, przejdźmy teraz do przodu i przyjrzyjmy się jej zaletom i wadom.
Zalety i wady wyzwalaczy
Zalety
- Wymuszanie bezpieczeństwa zatwierdzenia w tabeli, które są obecne w bazie danych
- Wyzwalacze zapewniają inny sposób sprawdzenia integralności danych
- Nieprawidłowe przeciwdziałanie giełdy
- Wyzwalacze obsługują błędy z warstwy bazy danych
- Zwykłe wyzwalacze mogą być przydatne do kontroli danych zmiany w tabelach
- Wyzwalacze dają alternatywny sposób uruchamiania szaplanowanych zadań . Używając wyzwalaczy, nie musimy czekać na uruchomienie zaplanowanych zdarzeń, ponieważ wyzwalacze są wywoływane automatycznie przed lub po wprowadzeniu zmiany w danych w tabeli
Wada s
- Wyzwalacze mogą zapewniać tylko rozszerzone walidacje , czyli nie wszystkie rodzaje walidacji. W przypadku prostych walidacji możesz użyć ograniczeń NOT NULL, UNIQUE, CHECK i FOREIGN KEY
- Wyzwalacze mogą zwiększyć narzut bazy danych
- Wyzwalacze mogą być trudne dorozwiązywania problemów ponieważ działają automatycznie w bazie danych, co może nie być niewidoczne dla aplikacji klienckich
To prowadzi nas do końca artykułu o wyzwalaczach w SQL. Mam nadzieję, że rozumiesz koncepcje wyzwalaczy.
Jeśli chcesz dowiedzieć się więcej o MySQL i poznać tę relacyjną bazę danych typu open source, sprawdź nasze szkolenie certyfikacyjne MySQL DBA, które obejmuje szkolenie na żywo prowadzone przez instruktora i -życiowe doświadczenie projektowe. To szkolenie pomoże ci dogłębnie zrozumieć MySQL i pomoże ci osiągnąć mistrzostwo w tym temacie.
Masz do nas pytanie? Wspomnij o tym w sekcji komentarzy tego Wyzwalacza w SQL, a my skontaktujemy się z Tobą.