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; (1) INSERT: Der Trigger wird aktiviert, wenn eine neue Zeile in eine Tabelle eingefügt wird, zum Beispiel durch INSERT, LOAD DATA und REPLACE 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, 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. 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:
|
<<: So reduzieren Sie die Bildgröße mithilfe des mehrstufigen Docker-Builds
>>: js, um den Popup-Effekt zu erzielen
Wirkung: Wenn sich die Diashow in eine Richtung b...
Grafisches Tutorial zur Installation und Konfigur...
In diesem Artikel finden Sie das Tutorial zur Ins...
1. Installieren Sie Apache # yum install -y httpd...
1.# # stellt eine Position auf einer Webseite dar...
MySQL ist ein relationales Datenbankverwaltungssy...
Betriebssystem: Win7 64-Bit Ultimate Edition Komp...
Verwenden Sie immer noch das flexible Rem-Layout?...
Ich habe vor Kurzem jemandem bei einem Projekt ge...
1. Transaktionen haben ACID-Eigenschaften Atomari...
Inhaltsverzeichnis Hintergrund Erzielen Sie einen...
SQL-Anweisungen (Structured Query Language), also...
Inhaltsverzeichnis App-Update-Prozess Grobes Flus...
Ich habe gestern lange geschlafen und war den gan...
einführen Durch das Einrichten einer Lese-/Schrei...