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:

  • dopisanie nowego rekordu do bazy danych w wyniku wykonania instrukcji INSERT,
  • zmiana zawartości rekordu w wyniku wykonania instrukcji UPDATE oraz
  • usunięcie rekordu w wyniku wykonania instrukcji DELETE.

Główne cechy wyzwalaczy to:

  • nie mogą mieć parametrów (ale mogą zapisywać dane w tabelach tymczasowych)
  • nie mogą zatwierdzać transakcji (COMMIT) ani ich wycofywać (ROLLBACK), ponieważ działają w kontekście instrukcji SQL, która spowodowała ich uruchomienie
  • mogą generować dodatkowe błędy, jeżeli są źle napisane.

Wyzwalacze w Oracle

edytuj

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).

Wyzwalacze metadanych
  • After Creation
  • Before Alter
  • After Alter
  • Before Drop
  • After Drop
  • Before Logoff
  • After Logon

Wyzwalacze w Microsoft SQL Server

edytuj

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:

  • DROP TABLE,
  • CREATE TABLE,
  • ALTER TABLE,
  • łączenie bądź rozłączanie się użytkownika z bazą danych.

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].

Wyzwalacze w PostgreSQL

edytuj

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:

  • Standard pozwala na wykonanie przez wyzwalacz instrukcji SQL innych niż SELECT, INSERT, UPDATE - takich jak CREATE TABLE.
  • SQL pozwala wykonywać wyzwalacze w wyniku aktualizowania wskazanych kolumn; ta cecha jest obecna w PostgreSQL od wersji 9.0.

Składnia (dla wersji 9.2):

CREATE [ CONSTRAINT ] TRIGGER name { BEFORE | AFTER | INSTEAD OF } { zdarzenie [ OR ... ] }
  ON tabela
  [ FROM referenced_table_name ]
  { NOT DEFERRABLE | [ DEFERRABLE ] { INITIALLY IMMEDIATE | INITIALLY DEFERRED } }
  [ FOR [ EACH ] { ROW | STATEMENT } ]
  [ WHEN ( warunek ) ]
  EXECUTE PROCEDURE nazwafunkcji ( argumenty )

gdzie „zdarzenie” może przyjmować wartości:

INSERT
UPDATE [ OF column_name [, ... ] ]
DELETE
TRUNCATE

Wyzwalacze w MySQL

edytuj

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;

Wyzwalacze w Firebird

edytuj

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ń:

  • CONNECT – użytkownik połączył się z bazą danych,
  • DISCONNECT – użytkownik rozłączył się z bazą danych,
  • TRANSACTION START – transakcja została rozpoczęta,
  • TRANSACTION COMMIT – transakcja została zatwierdzona,
  • TRANSACTION ROLLBACK – transakcja została wycofana.

Uwagi

edytuj
  1. Jest to opisane na w witrynie MSDN na stronie Using Inserted and Deleted tables.

Linki zewnętrzne

edytuj

📚 Artikel Terkait di Wikipedia

Jon Cryer

). Jon Cryer. Internet Off-Broadway Database. [dostęp 2024-12-26]. (ang.). Jon Cryer. Internet Broadway Database. [dostęp 2024-12-26]. (ang.). Jon Cryer

Elisabeth Shue

Las Vegas (1995, Leaving Las Vegas) jako Sera Mroczne miasto (1996, The Trigger Effect) jako Annie Przejrzeć Harry’ego (1997, Deconstructing Harry) jako

Willie Nelson

chyba kojarzonym instrumentem Williego Nelsona jest gitara akustyczna Trigger. W 1969 roku poprzednia gitara Nelsona uległa nieodwracalnym uszkodzeniom

Jack Noseworthy

Cole, Żyleta (Barb Wire, 1996) z Pamelą Anderson, Mroczne miasto (The Trigger Effect, 1996) z Elisabeth Shue, Ukryty wymiar (Event Horizon, 1997) obok

Emily Lloyd

Lloyda-Packa, aktora najlepiej znanego jako niezbyt inteligentny Colin "Trigger" Ball z popularnego sitcomu BBC Tylko głupcy i konie (Only Fools and Horses)

James Bond

Movie Firearms Database. [dostęp 2014-10-10]. (ang.). Internetowa encyklopedia filmowej broni palnej. Internet Movie Firearms Database. [dostęp 2014-10-10]

Kyle MacLachlan

Clifford Vandercave 1995: Showgirls jako Zack Carey 1996: Mroczne miasto (The Trigger Effect) jako Matthew 1996: Czas wściekłych psów (Mad Dog Time) jako Jake

Michael Weatherly

2001: Wenus i Mars (Venus and Mars) jako Cody Battle Vandermeer 2001: Trigger Happy jako Bill 2005: Jej mały sekret (Her Minor Thing) jako Tom 2009: