Heim >php教程 >PHP开发 >Ausführliche Erklärung der Trigger in SQL

Ausführliche Erklärung der Trigger in SQL

高洛峰
高洛峰Original
2016-12-14 16:14:461361Durchsuche

Trigger

Einführung in Trigger:

Ein Trigger ist eine spezielle gespeicherte Prozedur, deren Ausführung nicht durch ein Programm aufgerufen oder manuell gestartet wird, sondern durch ein Ereignis (Einfügen, Löschen, Aktualisieren) wird für eine Tabelle ausgeführt. Auslöser werden häufig verwendet, um Datenintegritätsbeschränkungen und Geschäftsregeln zu stärken. Meiner Meinung nach ist ein Trigger eigentlich ein Ereignis, genau wie in C# wird durch Klicken auf eine Schaltfläche der entsprechende Vorgang ausgelöst.

Klassifizierung von Triggern:

(1) DML-Trigger (Data Manipulation Language): bedeutet, dass der Trigger aktiviert wird, wenn ein DML-Ereignis in der Datenbank auftritt. DML-Ereignisse beziehen sich auf Einfüge-, Aktualisierungs- und Löschanweisungen, die Daten in Tabellen oder Ansichten ändern.
(2) DDL-Trigger (Data Definition Language): Wird aktiviert, wenn ein DDL-Ereignis auf dem Server oder in der Datenbank auftritt. Das DDL-Ereignis bezieht sich auf die Anweisungen zum Erstellen, Ändern und Löschen in der Tabelle oder im Index > (3) Anmeldetrigger: Wird ausgelöst, wenn sich ein Benutzer bei einer SQL SERVER-Instanz anmeldet, um eine Sitzung aufzubauen.

Unter diesen werden DML-Trigger am häufigsten verwendet und in verschiedene Arten unterteilt . Für die folgenden zwei Situationen:

(1) AFTER-Trigger: Führt Triggeroperationen nach der Ausführung von INSERT-, UPDATE- und DELETE-Anweisungsoperationen durch. Wird hauptsächlich zur Verarbeitung oder Überprüfung nach dem Aufzeichnen von Änderungen verwendet Sie können die Rollback-Transaktionsanweisung verwenden, um diesen Verschluss zurückzusetzen, aber Sie können keinen AFTER-Trigger für die Ansicht (2) INSTEAD OF-Trigger definieren: Der Trigger selbst wird vor der Ausführung der INSERT-, UPDATE- und DELETE-Anweisungsoperationen ausgeführt Der INSTEAD OF-Trigger kann in der Ansicht definiert werden.


In SQL SERVER 2008 werden bei der Implementierung von DML-Triggern zwei logische Tabellen DELETED und INSERTED verwendet Datenbankserver. Die Struktur der DELETED- und INSERED-Tabellen ist dieselbe wie die Struktur der Datentabelle, in der der Trigger ausgeführt wird: Die INSERED-Tabelle wird zum Speichern verwendet die Datensätze, die Sie nach dem Ausführen der Anweisungen zum Einfügen, Aktualisieren und Löschen aktualisieren. Wenn Sie beispielsweise ein Datenelement einfügen, wird der Datensatz in die Tabelle INSERTED eingefügt: Die Tabelle wird zum Speichern der von Ihnen erstellten Triggertabelle verwendet Wenn Ihre ursprüngliche Tabelle beispielsweise drei Daten enthält, können wir diese beiden temporären Daten verwenden Tabelle zum Testen der Auswirkung bestimmter Datenänderungen und zum Festlegen der Bedingungen für Triggeroperationen

Vor- und Nachteile von Triggern:

Trigger können über zugehörige Tabellen in der Datenbank implementiert werden, um mehr zu erzwingen Im Gegensatz zu CHECK-Einschränkungen können Trigger auf Spalten in anderen Tabellen verweisen. Trigger können beispielsweise auch andere Operationen ausführen zum Tabellenstatus vor und nach der Datenänderung. Mehrere Trigger desselben Typs (INSERT, UPDATE oder DELETE) für eine Tabelle ermöglichen die Annahme mehrerer unterschiedlicher Antworten als Reaktion auf dieselbe Änderungsanweisung.

Obwohl Trigger zwar leistungsstark sind und viele komplexe Funktionen einfach und zuverlässig implementieren können, warum sollten sie gleichzeitig mit Vorsicht verwendet werden? Zu viele Trigger erschweren die Wartung der Datenbank und der Anwendungen. Gleichzeitig wirkt sich eine übermäßige Abhängigkeit von Triggern unweigerlich auf die Struktur der Datenbank aus und erhöht die Komplexität der Wartungsvorgänge.

Syntax

Trigger erstellen

Trigger löschen:

Trigger ändern:
CREATE TRIGGER 触发器名称  
ON 表名  
{ FOR | AFTER | INSTEAD OF }   
{ [ INSERT ] [ , ] [ DELETE ] [ , ]   
   [UPDATE ] }  
AS   
  SQL 语句 [ ... n ]

Aktivieren und deaktivieren:
DROP TRIGGER 触发器名 [ , ... n ]

Erinnerung und Schutz:
ALTER TRIGGER 触发器名称  
ON 表名  
{ FOR | AFTER | INSTEAD OF }   
{ [ INSERT ] [ , ] [ DELETE ] [ , ]   
   [UPDATE ] }  
AS   
  SQL 语句 [ ... n ]

Beispiel
disable trigger trigDB on database --禁用触发器  
enable trigger trigDB on database --开启触发器

print '删除了触发器***'   
raiserror('数据一致性验证',16,1)  
rollback transaction

Erstellt in S-Tabelle UPDATE-Trigger:


Es ist verboten, die Datensätze von Schülern mit nicht bestandenen Noten in der SC-Tabelle zu löschen:

Es ist verboten, die Noten von Schülern mit nicht bestandenen Noten in der SC-Tabelle zu ändern vorbei:
Create trigger tri_Updates  
on s  
for update   
as   
print 'the table s was updated'

CREATE TRIGGER tri_del_grade  
  ON SC FOR DELETE  
  AS  
    IF EXISTS(SELECT * FROM DELETED      
          WHERE Grade < 60)  
      ROLLBACK

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn