W dzisiejszym świecie Wyzwalacz reprezentuje bardzo ważną kwestię, która wpływa na codzienne życie ludzi. Od momentu pojawienia się Wyzwalacz wywołał kontrowersje i debaty, wzbudzając szerokie zainteresowanie społeczeństwa. Z biegiem lat Wyzwalacz ewoluował i stał się przedmiotem studiów i badań obejmujących różne obszary, od nauki i technologii po politykę i kulturę. W tym artykule szczegółowo zbadamy znaczenie i wpływ Wyzwalacz na dzisiejsze społeczeństwo, analizując jego wpływ na różne aspekty codziennego życia i oferując kompleksowe spojrzenie na to zjawisko, które nadal budzi zainteresowanie i uwagę na całym świecie.
Wyzwalacz (ang. trigger) – procedura wykonywana automatycznie jako reakcja na pewne zdarzenia w tabeli bazy danych. Wyzwalacze mogą ograniczać dostęp do pewnych danych, rejestrować zmiany danych lub nadzorować modyfikacje danych.
Systemy baz danych posiadające wyzwalacze: Microsoft SQL Server, PostgreSQL, Sybase, Oracle, Firebird, SQLite, InterBase SQL, MySQL (od wersji 5.0.2), Progress.
Standard języka SQL zdefiniował wyzwalacze dość późno, bo dopiero od wersji 99. Z tego powodu różne systemy bazodanowe opracowały własną składnię tworzenia wyzwalaczy. Dość blisko standardu jest Oracle oraz Firebird, natomiast system bazodanowy Microsoftu używa składni w wielu miejscach różniącej się od wytycznych.
Istnieje kilka typów wyzwalaczy. Wyzwalacze BEFORE – wykonywane przed instrukcją generującą zdarzenie. Wyzwalacze AFTER są wykonane po instrukcji generującej zdarzenie. W niektórych bazach danych są również wyzwalacze INSTEAD OF – są one wykonywane zamiast instrukcji generującej zdarzenie.
Istnieją trzy typowe zdarzenia powodujące wykonanie wyzwalaczy:
Główne cechy wyzwalaczy to:
Oprócz wyzwalaczy wykonywanych gdy dane są modyfikowane, Oracle 9i udostępnia wyzwalacze wykonywane gdy struktura bazy (struktura tabeli) jest modyfikowana oraz gdy użytkownik łączy się lub rozłącza z bazą danych. Ten typ wyzwalaczy nazywany jest „wyzwalaczami metadanych” (ang. schema-level triggers).
Microsoft SQL Server udostępnia wyzwalacze wykonywane zarówno po, jak i zamiast instrukcji INSERT, UPDATE lub DELETE.
Microsoft SQL Server udostępnia wyzwalacze dla tabel oraz widoków, z tym że w przypadku widoków można stosować tylko przez wyzwalacz INSTEAD OF.
W Microsoft SQL Server 2005 wprowadzono wyzwalacze DDL, które są wykonywane w reakcji na bardzo szeroki zakres zdarzeń, takich jak:
W witrynie MSDN dostępna jest pełna lista tych zdarzeń.
Wyzwalacze wykonują swoje działania korzystając z dostępu do tymczasowych tabel Inserted i Deleted.[a]
W PostgreSQL wyzwalacze są dostępne od 1997 roku i pozwalają wywoływać funkcje gdy wykonywane są instrukcje SQL zmieniające dane: INSERT, UPDATE, DELETE oraz TRUNCATE (niestandardowe).
Następujące cechy SQL:2003 nie są zaimplementowane w PostgreSQL:
Składnia (dla wersji 9.2):
CREATE TRIGGER name { BEFORE | AFTER | INSTEAD OF } { zdarzenie }
ON tabela
{ NOT DEFERRABLE | { INITIALLY IMMEDIATE | INITIALLY DEFERRED } }
{ ROW | STATEMENT } ]
EXECUTE PROCEDURE nazwafunkcji ( argumenty )
gdzie „zdarzenie” może przyjmować wartości:
INSERT
UPDATE ]
DELETE
TRUNCATE
Obsługa wyzwalaczy została wprowadzona w MySQL 5.0. Obsługiwane są wyzwalacze dla instrukcji INSERT, UPDATE i DELETE.
Standard SQL:2003 umożliwia w wyzwalaczach dostęp do zmiennych rekordowych przy użyciu składni takiej jak REFERENCING NEW AS n. Na przykład jeżeli wyzwalacz monitoruje zmiany w kolumnie pensja to odpowiedni wyzwalacz może zostać zapisany następująco:
CREATE TRIGGER pensja_trigger
BEFORE UPDATE ON pracownicy_table
REFERENCING NEW ROW AS n, OLD ROW AS o
FOR EACH ROW
IF n.pensja <> o.pensja THEN
--wykonaj odpowiednie działania;
END IF;
Firebird obsługuje wszystkie podstawowe typy wyzwalaczy: BEFORE INSERT, AFTER INSERT, BEFORE UPDATE, AFTER UPDATE, BEFORE DELETE, AFTER DELETE.
W Firebird 1.5 wprowadzone zostały wyzwalacze wieloakcyjne (ang. multi-action triggers). Pozwalają one wykonać ten sam wyzwalacz w wyniku zajścia jednego z kilku zdarzeń.
Przykład wyzwalacza:
CREATE TRIGGER ZmianaStanu
FOR TABLE StanyTowarow
AFTER INSERT OR UPDATE OR DELETE
AS
BEGIN
/* działania wyzwalacza */
END
W Firebird 2.1 wyzwalacze mogą być również wykonywane w wyniku jednego z następujących zdarzeń: