Heim  >  Artikel  >  Datenbank  >  Verwendung von MySQL-Triggern

Verwendung von MySQL-Triggern

黄舟
黄舟Original
2016-12-12 11:53:221109Durchsuche

MySQL bietet Unterstützung für Trigger. Ein Trigger ist ein Datenbankobjekt, das sich auf Tabellenoperationen bezieht. Wenn ein bestimmtes Ereignis in der Tabelle auftritt, in der sich der Trigger befindet, wird das Objekt aufgerufen, d. h. das Operationsereignis der Tabelle löst die Ausführung des Triggers in der Tabelle aus.

Trigger erstellen
In MySQL lautet die Syntax zum Erstellen eines Triggers wie folgt:

CREATE TRIGGER trigger_name
trigger_time
trigger_event ON tbl_name
FOR EACH ROW
trigger_stmt

Unter anderem:

trigger_name: identifiziert den Triggernamen, vom Benutzer angegeben;
trigger_time: identifiziert die Auslösezeit, der Wert ist VOR oder AFTER;
trigger_event: identifiziert das Triggerereignis, der Wert ist INSERT, UPDATE oder DELETE;
tbl_name: identifiziert den Tabellennamen zum Erstellen des Triggers, d BEGIN und END enthalten mehrere Anweisungen.

Es ist ersichtlich, dass 6 Arten von Triggern erstellt werden können, nämlich: VOR DEM EINFÜGEN, VOR DEM UPDATE, VOR DEM LÖSCHEN, NACH DEM EINFÜGEN, NACH AKTUALISIEREN, NACH DEM LÖSCHEN.

Eine weitere Einschränkung besteht darin, dass Sie nicht gleichzeitig zwei Trigger desselben Typs für eine Tabelle erstellen können, sodass maximal 6 Trigger für eine Tabelle erstellt werden können.

trigger_event detaillierte Erklärung

MySQL außer INSERT, UPDATE, DELETE Zusätzlich zur Definition grundlegender Operationen werden auch LOAD DATA- und REPLACE-Anweisungen definiert, die auch die Auslösung der oben genannten 6 Arten von Triggern bewirken können.

Mit der LOAD DATA-Anweisung wird eine Datei in eine Datentabelle geladen, was einer Reihe von INSERT-Operationen entspricht.

Die REPLACE-Anweisung ist im Allgemeinen der INSERT-Anweisung sehr ähnlich, mit der Ausnahme, dass sich die eingefügten Daten vom Original unterscheiden, wenn die Tabelle einen Primärschlüssel oder einen eindeutigen Index enthält Wenn der Primärschlüssel oder der eindeutige Index konsistent ist, werden zuerst die Originaldaten gelöscht und dann neue Daten hinzugefügt. Mit anderen Worten, eine REPLACE-Anweisung entspricht manchmal einer.

INSERT-Anweisung entspricht manchmal einer DELETE-Anweisung plus einer INSERT-Anweisung.

Trigger vom Typ INSERT: Der Trigger wird aktiviert, wenn eine Zeile eingefügt wird, und kann durch INSERT-, LOAD DATA- und REPLACE-Anweisungen

UPDATE ausgelöst werden Typ Trigger: Der Trigger wird aktiviert, wenn eine bestimmte Zeile geändert wird, was durch die UPDATE-Anweisung ausgelöst werden kann.
DELETE Typ Trigger: Der Trigger wird aktiviert, wenn eine bestimmte Zeile gelöscht wird, was durch ausgelöst werden kann Ausgelöst durch DELETE- und REPLACE-Anweisungen.

BEGIN … END Ausführliche Erklärung

In MySQL lautet die Syntax der BEGIN … END-Anweisung:

BEGIN

[statement_list]
END
Unter anderem Anweisungsliste Stellt eine Liste mit einer oder mehreren Anweisungen dar. Jede Anweisung in der Liste muss mit einem Semikolon (;) abgeschlossen werden.
In MySQL ist das Semikolon die Kennung des Endes der Anweisung. Wenn ein Semikolon auftritt, bedeutet dies, dass die Anweisung beendet ist und MySQL mit der Ausführung beginnen kann. Daher stößt der Interpreter auf Anweisungsliste Die Ausführung beginnt nach dem Semikolon in , und dann wird ein Fehler gemeldet, da kein END passendes BEGIN gefunden wird.

Der DELIMITER-Befehl wird zu diesem Zeitpunkt verwendet (DELIMITER ist das Trennzeichen, was bedeutet, dass es sich um einen Befehl handelt und keine End-of-Statement-ID erforderlich ist). Die Syntax lautet:

DELIMITER neuer_delemiter
neuer_delemiter Es kann auf ein oder mehrere Längensymbole eingestellt werden. Der Standardwert ist Semikolon (;). Wir können es in andere Symbole ändern, z. B. $:
DELIMITER $
Die Anweisung danach endet mit einem Semikolon und der Interpreter reagiert nicht. Nur wenn $ angetroffen wird, gilt die Anweisung als beendet. Beachten Sie, dass wir nach der Verwendung daran denken sollten, es wieder zu ändern.

Ein vollständiges Beispiel für die Erstellung eines Triggers

Angenommen, es gibt zwei Tabellen im System:
Klassentabelle class(Klassennummer classID, Anzahl der Schüler in der Klasse stuCount)
Schülertabelle Student (Studenten-ID, Klassen-ID)
Um einen Auslöser zu erstellen, der die Anzahl der Studenten in der Klassentabelle automatisch aktualisiert, wenn Studenten hinzugefügt werden, lautet der Code wie folgt:

DELIMITER $
create trigger tri_stuInsert after insert
on student for each row
begin
declare c int;
set c = (select stuCount from class where classID=new.classID);
update class set stuCount = c + 1 where classID = new.classID;
end$
DELIMITER ;
Detaillierte Erklärung der Variablen

DECLARE wird in MySQL verwendet, um eine lokale Variable zu definieren, die nur in BEGIN ... END verwendet werden kann Es wird in zusammengesetzten Anweisungen verwendet und sollte am Anfang von zusammengesetzten Anweisungen definiert werden,

, also vor anderen Anweisungen. Die Syntax lautet wie folgt:

DECLARE var_name[,.... ] Typ [STANDARDwert]

Darunter:
var_name ist der Variablenname, genau wie bei SQL Die Anweisungen sind die gleichen, bei Variablennamen wird die Groß-/Kleinschreibung nicht beachtet. Es können mehrere von MySQL unterstützte Datentypen gleichzeitig definiert werden, der Anfangswert der Variablen ist NULL. Bei Bedarf können Sie verwenden Die DEFAULT-Klausel stellt einen Standardwert bereit, der als Ausdruck angegeben werden kann.

Verwenden Sie die SET-Anweisung für die Variablenzuweisung. Die Syntax lautet:

SET var_name = expr [,var_name = expr] ...

Detaillierte Erklärung von NEU und ALT


Im obigen Beispiel wird das Schlüsselwort NEW verwendet, das INSERTED und DELETED in MS SQL Server ähnelt. NEW und DELETED werden in MySQL definiert ALT, wird verwendet, um

darzustellen

In der Tabelle, in der sich der Auslöser befindet, die Datenzeile, die den Auslöser ausgelöst hat.
Im Einzelnen:
In einem Trigger vom Typ INSERT, NEU Wird verwendet, um neue Daten darzustellen, die (VOR) eingefügt werden oder (NACHHER) eingefügt wurden.
In UPDATE-Typ-Triggern wird OLD verwendet, um die ursprünglichen Daten darzustellen, die geändert werden oder geändert wurden Wird verwendet, um neue Daten darzustellen, die geändert werden oder wurden.
In Triggern vom Typ DELETE wird OLD verwendet, um die Originaldaten darzustellen, die gelöscht werden oder wurden.
Verwendung: NEW.columnName (columnName ist ein Spaltenname der entsprechenden Datentabelle)
Außerdem ist OLD schreibgeschützt, während NEW SET in Triggern verwenden kann Weisen Sie einen Wert zu, damit der Auslöser nicht erneut ausgelöst wird und einen Rundruf auslöst (fügen Sie beispielsweise vor dem Einfügen eines Studenten „2013“ vor seiner Studentennummer hinzu).

Trigger anzeigen

ist dasselbe wie das Anzeigen von Datenbanken (Datenbanken anzeigen;) und das Anzeigen von Tabellen (Tabellen anzeigen;). Die Syntax zum Anzeigen von Triggern lautet wie folgt:

SHOW TRIGGERS [FROM schema_name];
Wobei schema_name der Name des Schemas in MySQL ist Schema und Datenbank sind gleich, das heißt, der Datenbankname kann angegeben werden, sodass

nicht zuerst „Datenbankname verwenden“ muss.

Trigger löschen

Wie beim Löschen von Datenbanken und Tabellen lautet die Syntax zum Löschen von Triggern wie folgt:

DROP TRIGGER [IF EXISTS] [Schemaname.]Triggername

Ausführungsreihenfolge der Trigger

Die von uns erstellte Datenbank ist im Allgemeinen eine InnoDB-Datenbank, und die darauf erstellten Tabellen sind Transaktionstabellen, also transaktionssicher. Wenn zu diesem Zeitpunkt die SQL-Anweisung oder der Trigger nicht ausgeführt werden kann, wird MySQL Die Transaktion wird zurückgesetzt, einschließlich:

① Wenn der BEFORE-Trigger nicht ausgeführt werden kann, kann SQL nicht korrekt ausgeführt werden.
②Wenn die SQL-Ausführung fehlschlägt, wird der Trigger vom Typ AFTER nicht ausgelöst.
③NACH Wenn die Ausführung eines Triggers dieses Typs fehlschlägt, führt SQL einen Rollback durch.

Haben Sie etwas über die Verwendung von MySQL-Triggern gelernt? Wenn Sie Fragen haben, hinterlassen Sie mir bitte eine Nachricht und wir können gemeinsam Fortschritte machen.


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