Detailliertes Beispiel für die Verwendung von MySQL-Triggern

Detailliertes Beispiel für die Verwendung von MySQL-Triggern

Details zur MySQL-Triggersyntax:

    Ein Trigger ist eine spezielle gespeicherte Prozedur, die ausgeführt wird, wenn Daten in eine bestimmte Tabelle eingefügt, gelöscht oder aktualisiert werden. Er bietet anspruchsvollere und komplexere Datensteuerungsfunktionen als die Standardfunktionen der Daten selbst . Ein Trigger wird nicht durch ein Programm aufgerufen, sondern durch ein Ereignis ausgelöst. Automatische Durchsetzung von Geschäftsregeln bei Datenänderungen. Wird häufig verwendet, um Datenintegritätsbeschränkungen und Geschäftsregeln zu stärken. Trigger können andere Tabellen abfragen und replizierte SQL-Anweisungen enthalten. Trigger können auch verwendet werden, um referenzielle Integrität zu erzwingen. Trigger können komplexere Einschränkungen erzwingen als die, die mit Prüfeinschränkungen definiert sind.

(I) CREATE TRIGGER-Syntax

ERSTELLEN SIE TRIGGER Triggername Triggerzeit Triggerereignis AUF Tabellenname FÜR JEDE ZEILE Triggerstmt;
Ein Trigger ist ein benanntes Datenbankobjekt, das mit einer Tabelle verknüpft ist und aktiviert wird, wenn in der Tabelle ein bestimmtes Ereignis eintritt.
Der Trigger ist mit der Tabelle mit dem Namen tbl_name verknüpft. tbl_name muss auf eine permanente Tabelle verweisen. Sie können einen Trigger nicht mit einer temporären Tabelle oder Ansicht verknüpfen.
trigger_time ist die Aktionszeit des Triggerprogramms. Es kann BEFORE oder AFTER sein, um anzugeben, dass der Trigger vor oder nach der Anweisung, die ihn aktiviert, ausgelöst werden soll.
trigger_event gibt den Anweisungstyp an, der den Trigger aktiviert. trigger_event kann einen der folgenden Werte haben:

(1) INSERT: Der Trigger wird aktiviert, wenn eine neue Zeile in eine Tabelle eingefügt wird, zum Beispiel durch INSERT, LOAD DATA und REPLACE
Stellungnahme.
(2) UPDATE: Der Trigger wird aktiviert, wenn eine Zeile beispielsweise durch eine UPDATE-Anweisung geändert wird.
(3).DELETE: Der Trigger wird aktiviert, wenn eine Zeile aus einer Tabelle gelöscht wird, beispielsweise durch DELETE- und REPLACE-Anweisungen.

Es ist wichtig zu beachten, dass trigger_event nicht sehr ähnlich der SQL-Anweisung ist, die den Trigger als Tabellenoperation aktiviert. Beispielsweise kann ein BEFORE-Trigger auf INSERT nicht nur durch eine INSERT-Anweisung, sondern auch durch eine LOAD DATA-Anweisung aktiviert werden. Ein Beispiel, bei dem dies verwirrend sein kann, ist die INSERT INTO .. ​​​​ON DUPLICATE UPDATE …-Syntax: Für jede Zeile wird ein BEFORE INSERT-Trigger aktiviert, gefolgt von einem AFTER INSERT-Trigger oder einem BEFORE UPDATE- und einem AFTER UPDATE-Trigger, je nachdem, ob die Zeilen doppelte Schlüssel enthalten.

Für eine bestimmte Tabelle kann es nicht zwei Trigger mit derselben Triggeraktionszeit und demselben Ereignis geben. Beispielsweise können Sie nicht zwei BEFORE UPDATE-Trigger für eine Tabelle haben. Sie können jedoch 1 BEFORE UPDATE-Trigger und 1 BEFORE INSERT-Trigger oder 1 BEFORE UPDATE-Trigger und 1 AFTER UPDATE-Trigger haben. trigger_stmt ist die Anweisung, die ausgeführt wird, wenn der Trigger aktiviert wird. Wenn Sie mehrere Anweisungen ausführen möchten, verwenden Sie die zusammengesetzte Anweisungsstruktur BEGIN ... END. Dadurch können Sie die gleichen Anweisungen verwenden, die in gespeicherten Unterprogrammen zulässig sind

(II) DROP TRIGGER-Syntax

DROP TRIGGER [schema_name.] trigger_name löscht den Trigger. Der Schemaname (schema_name) ist optional. Wenn das Schema weggelassen wird, werden Trigger aus dem aktuellen Schema gelöscht.

Hinweis: Beim Upgrade von einer MySQL-Version vor MySQL 5.0.10 auf MySQL 5.0.10 oder höher (einschließlich aller MySQL 5.1-Versionen) müssen Sie vor dem Upgrade alle Trigger löschen und sie anschließend neu erstellen. Andernfalls funktioniert DROP TRIGGER nach dem Upgrade nicht mehr. Die DROP TRIGGER-Anweisung erfordert das SUPER-Privileg.

(III) Triggerprogramm verwenden

In diesem Abschnitt wird die Verwendung von Triggern in MySQL 5.1 beschrieben und es werden die Einschränkungen bei der Verwendung von Triggern erläutert.

Ein Trigger ist ein benanntes Datenbankobjekt, das mit einer Tabelle verknüpft ist und aktiviert wird, wenn in der Tabelle ein bestimmtes Ereignis eintritt. Bei einigen Verwendungen von Triggern kann dieser dazu genutzt werden, in eine Tabelle eingefügte Werte zu prüfen oder Berechnungen für Werte durchzuführen, die an einer Aktualisierung beteiligt sind.

Ein Trigger ist einer Tabelle zugeordnet und wird aktiviert, wenn eine INSERT-, DELETE- oder UPDATE-Anweisung für die Tabelle ausgeführt wird. Trigger können so eingestellt werden, dass sie vor oder nach der Ausführung einer Anweisung aktiviert werden. Beispielsweise kann ein Trigger aktiviert werden, bevor jede Zeile aus einer Tabelle gelöscht wird oder nachdem jede Zeile aktualisiert wurde. Um einen Trigger zu erstellen oder zu löschen, verwenden Sie die Anweisungen CREATE TRIGGER oder DROP TRIGGER. Trigger können weder gespeicherte Prozeduren aufrufen, die Daten an den Client zurückgeben, noch können sie dynamisches SQL mit der Anweisung CALL verwenden (die es gespeicherten Prozeduren ermöglicht, Daten über Parameter an den Trigger zurückzugeben).

Trigger können keine Anweisungen verwenden, die Transaktionen explizit oder implizit starten oder beenden, wie etwa START TRANSACTION,
COMMIT oder ROLLBACK.

Verwenden Sie die Schlüsselwörter OLD und NEW, um auf die Spalten in der vom Trigger betroffenen Zeile zuzugreifen (bei OLD und NEW wird die Groß-/Kleinschreibung nicht beachtet).

In einem INSERT-Trigger kann nur NEW.col_name verwendet werden, nicht die alte Zeile. In einem DELETE-Trigger kann nur OLD.col_name verwendet werden, keine neuen Zeilen. In einem UPDATE-Trigger können Sie OLD.col_name verwenden, um auf die Spalten einer Zeile vor der Aktualisierung zu verweisen, und Sie können NEW.col_name verwenden, um auf die Spalten der Zeile nach der Aktualisierung zu verweisen.

Mit OLD benannte Spalten sind schreibgeschützt. Sie können darauf verweisen, aber nicht ändern. Sie können auf eine Spalte mit dem Namen „NEW“ verweisen, wenn Sie über das SELECT-Privileg verfügen. Wenn Sie in einem BEFORE-Trigger über das UPDATE-Privileg verfügen, können Sie dessen Wert mit „SET NEW.col_name = value“ ändern. Dies bedeutet, dass Sie Trigger verwenden können, um die Werte zu ändern, die in neue Zeilen eingefügt werden, oder die Werte, die zum Aktualisieren von Zeilen verwendet werden. Im BEFORE-Trigger ist der NEUE Wert der Spalte AUTO_INCREMENT 0 und nicht die Sequenznummer, die automatisch generiert wird, wenn der neue Datensatz tatsächlich eingefügt wird.

Mithilfe der BEGIN ... END-Struktur können Sie einen Trigger definieren, der mehrere Anweisungen ausführt. Im BEGIN-Block können Sie auch andere in gespeicherten Unterprogrammen zulässige Syntax verwenden, z. B. Bedingungen und Schleifen. Wenn Sie jedoch einen Trigger definieren, der mehrere Anweisungen ausführt, und das MySQL-Programm zum Eingeben des Triggers verwenden, müssen Sie, genau wie bei gespeicherten Unterprogrammen, das Anweisungstrennzeichen neu definieren, damit Sie das Zeichen ";" in der Triggerdefinition verwenden können. Im folgenden Beispiel werden diese Punkte demonstriert. In diesem Beispiel wird ein UPDATE-Trigger definiert, der beim Aktualisieren jeder Zeile den neuen Wert prüft und den Wert so ändert, dass er im Bereich zwischen 0 und 100 liegt. Es muss ein BEFORE-Trigger sein, da der Wert überprüft werden muss, bevor er zum Aktualisieren der Zeile verwendet wird:

mysql> Trennzeichen //
mysql> CREATE TRIGGER upd_check VOR UPDATE AUF Konto
   -> FÜR JEDE ZEILE
   -> BEGIN
   -> WENN NEUER.Betrag < 0 DANN
   -> SETZEN SIE NEU.Betrag = 0;
   -> SONST WENN NEU.Betrag > 100 DANN
   -> SETZEN SIE NEU.Betrag = 100;
   -> ENDE, WENN;
   -> ENDE;//
mysql> Trennzeichen;

Ein einfacherer Ansatz besteht darin, eine gespeicherte Prozedur separat zu definieren und die gespeicherte Prozedur dann vom Trigger aus mit einer einfachen CALL-Anweisung aufzurufen. Diese Methode ist auch hilfreich, wenn Sie vorhaben, dieselbe Subroutine aus mehreren Triggern heraus aufzurufen. Während der Ausführung eines Triggers behandelt MySQL Fehler wie folgt:

(1) Wenn der BEFORE-Trigger fehlschlägt, wird die Operation für die entsprechende Zeile nicht ausgeführt.
(2) Der AFTER-Trigger wird nur ausgeführt, wenn der BEFORE-Trigger (sofern vorhanden) und die Zeilenoperation erfolgreich ausgeführt wurden.
(3) Wenn während der Ausführung eines BEFORE- oder AFTER-Triggers ein Fehler auftritt, schlägt die gesamte Anweisung, die den Trigger aufgerufen hat, fehl.
(4) Bei transaktionalen Tabellen werden alle durch die Anweisung durchgeführten Änderungen zurückgesetzt, wenn der Trigger fehlschlägt (und somit die gesamte Anweisung fehlschlägt). Bei nicht transaktionalen Tabellen kann diese Art von Rollback nicht durchgeführt werden, d. h., auch wenn eine Anweisung fehlschlägt, bleiben alle vor dem Fehlschlagen vorgenommenen Änderungen wirksam.

Beispiel 1:

mysql> CREATE TABLE-Konto (acct_num INT, Betrag DECIMAL (10,2));
mysql> ERSTELLEN SIE TRIGGER ins_sum VOR DEM INSERT AUF Konto FÜR JEDE ZEILE SET @sum = @sum + NEW.amount;

 

Vielen Dank fürs Lesen, ich hoffe, es kann Ihnen helfen, danke für Ihre Unterstützung dieser Site!

Das könnte Sie auch interessieren:
  • MySQL-Trigger-Verwendungsszenarien und Methodenbeispiele
  • MySQL-Triggerprinzip und Analyse von Anwendungsbeispielen
  • MySQL-Trigger: Beispielanalyse zum Erstellen mehrerer Trigger
  • Einfaches Beispiel für die Definition und Verwendung von MySQL-Triggern
  • MySQL verwendet Trigger, um das Zeilenlimit der Tabelle in der Datenbank zu lösen. Detaillierte Erklärung und Beispiele
  • MySQL-Trigger: ausführliche Erklärung und einfaches Beispiel
  • Beispiel-Tutorial zur Verwendung von MySQL-Triggern zum Migrieren und Synchronisieren von Daten
  • Eine kurze Zusammenfassung und Beispiele für MySQL-Trigger
  • Ein einfaches Beispiel und eine Einführung in MySQL-Trigger
  • Detaillierte Erklärung des MySQL-Triggerbeispiels

<<:  So reduzieren Sie die Bildgröße mithilfe des mehrstufigen Docker-Builds

>>:  js, um den Popup-Effekt zu erzielen

Artikel empfehlen

Zusammenfassung des MySQL-Installationsdiagramms

Grafisches Tutorial zur Installation und Konfigur...

CentOS7-Bereitstellung Flask (Apache, mod_wsgi, Python36, venv)

1. Installieren Sie Apache # yum install -y httpd...

Kennen Sie die Bedeutung von Sonderzeichen in URLs?

1.# # stellt eine Position auf einer Webseite dar...

Was macht die MySQL-Datenbank?

MySQL ist ein relationales Datenbankverwaltungssy...

Detailliertes Installationstutorial für MySQL 5.7.11 unter Win7

Betriebssystem: Win7 64-Bit Ultimate Edition Komp...

So verwenden Sie vw+rem für das mobile Layout

Verwenden Sie immer noch das flexible Rem-Layout?...

js realisiert eine schrittweise zunehmende digitale Animation

Inhaltsverzeichnis Hintergrund Erzielen Sie einen...

MySQL-Anweisungsanordnung und zusammenfassende Einführung

SQL-Anweisungen (Structured Query Language), also...

Eine kurze Diskussion über React Native APP-Updates

Inhaltsverzeichnis App-Update-Prozess Grobes Flus...

Beispielcode für die Master-Slave-Trennung einer MySQL-Datenbank

einführen Durch das Einrichten einer Lese-/Schrei...