Verwendung und Verständnis von MySQL-Triggern

Verwendung und Verständnis von MySQL-Triggern

1. Was ist ein Auslöser?

Ein spezieller Typ von Datenbankprogramm, das bestimmte Datenoperationen (Einfügen/Aktualisieren/Löschen) überwachen und verwandte Operationen (Einfügen/Aktualisieren/Löschen) auslösen kann, um die Integrität der Daten zu schützen.

Mein persönliches Verständnis ist, dass es dem Beobachtermuster von Java ein wenig ähnelt. Wenn sich ein Objekt ändert, reagiert auch der Beobachter.

Mysql scheint Trigger ab 5.0 zu unterstützen.

2. Erstellen Sie einen Trigger

Ich werde zwei Möglichkeiten zum Erstellen von Triggern vorstellen: Erstellen mit Anweisungen und Erstellen mit Navicat.

Die Syntax zum Erstellen eines Triggers lautet wie folgt:

TRIGGER ERSTELLEN trigger_name trigger_time trigger_event ON tb_name FÜR JEDE ZEILE trigger_stmt
trigger_name: der Name des Triggers trigger_time: die Triggerzeit, die VOR oder NACH liegen kann
trigger_event: Triggerereignis, INSERT, DELETE oder UPDATE
tb_name: gibt die Tabelle an, auf der der Trigger erstellt wird. trigger_stmt: der Hauptteil des Triggers, der eine SQL-Anweisung oder mehrere Anweisungen sein kann, die von BEGIN und END umschlossen sind. Wir können also sagen, dass MySQL die folgenden sechs Triggertypen erstellt:
VOR DEM EINFÜGEN, VOR DEM LÖSCHEN, VOR DEM AKTUALISIEREN
NACH DEM EINFÜGEN, NACH DEM LÖSCHEN, NACH DEM AKTUALISIEREN

Der Parameter Triggername bezieht sich auf den Namen des zu erstellenden Triggers.

Die Parameter BEFORE und AFTER geben an, wann der Trigger ausgeführt wird, vor oder nach dem Ereignis.

FOR EACH ROW bedeutet, dass jeder Vorgang an einem Datensatz, der das Triggerereignis erfüllt, den Trigger auslöst.

Erstellen Sie mehrere Trigger, die Anweisungen ausführen:

CREATE TRIGGER Triggername VOR | NACH Triggerereignis ON Tabellenname FÜR JEDE ZEILE
BEGINNEN
 Anweisungsliste ausführen END

Verwendung von NEU und ALT:

Trigger-Typ Einsatz von Neuem und Altem
einfügen Neu steht für neu hinzugefügte Daten
aktualisieren Neu stellt die aktualisierten Daten dar, und alt stellt die Daten vor der Aktualisierung dar.
löschen alt stellt die zu löschenden Daten dar

Ein Feld kann „new/lod“ genannt werden.

Als nächstes erstellen wir zwei Tabellen zum Testen:

stu-Tabelle: Haupttabelle (beobachtet)

Tabelle löschen, wenn `stu` vorhanden ist;
TABELLE ERSTELLEN `stu` (
`id` int(11) NICHT NULL AUTO_INCREMENT KOMMENTAR 'id',
`name` varchar(255) ZEICHENSATZ utf8mb4 SORTIMENT utf8mb4_general_ci NULL STANDARD NULL KOMMENTAR 'Name',
`Alter` int(11) NULL DEFAULT NULL COMMENT 'Alter',
`sort` int(11) NULL DEFAULT NULL COMMENT 'Sortierfeld',
PRIMÄRSCHLÜSSEL (`id`) MIT BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 18 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamisch;

stu_log-Tabelle: Trigger-Assoziationstabelle (Beobachter)

Tabelle löschen, wenn `stu_log` vorhanden ist;
Tabelle „stu_log“ erstellen (
`id` int(11) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` varchar(255) ZEICHENSATZ utf8mb4 SORTIMENT utf8mb4_general_ci NULL STANDARD NULL,
`create_time` datetime(0) NULL DEFAULT NULL,
PRIMÄRSCHLÜSSEL (`id`) MIT BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 7 CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamisch;

Nehmen wir nun an, dass es ein Unternehmen gibt, bei dem beim Hinzufügen oder Löschen von Daten aus der Tabelle „stu“ synchron ein Protokoll in „stu_log“ aufgezeichnet wird, in dem Name und Uhrzeit festgehalten werden.

Wenn wir keine Trigger verwenden, müssen wir Code schreiben, um diese Anforderung umzusetzen, aber Trigger können uns dabei helfen, dies problemlos zu erreichen.

Zuerst erstellen wir einen Einfügetrigger mit der Anweisung:

TRIGGER LÖSCHEN, WENN `insert_log` EXISTIERT;
Trennzeichen;;
ERSTELLEN SIE DEN TRIGGER `add_log` NACH DEM INSERT AUF `stu` FÜR JEDE ZEILE BEGIN
INSERT INTO stu_log(Name,Erstellungszeit) VALUES(neu.`Name`,jetzt());
ENDE
;;
Trennzeichen ;

Ausführungsergebnis:

Dann verwenden wir Navicat, um einen Löschauslöser zu erstellen:

Schritt 1: Klicken Sie mit der rechten Maustaste auf die Stu-Tabelle und wählen Sie Design Table ---- Trigger

Schritt 2: Füllen Sie die Optionen wie in der Abbildung gezeigt aus und wählen Sie Vor dem Löschen auslösen

Schritt 3: Schreiben Sie die Ausführungsanweisung in das Definitionsfeld unten, wie in der Abbildung gezeigt. Denken Sie daran, auf Speichern zu klicken!

Stellungnahme:

beginnen
INSERT INTO stu_log(Name,Erstellungszeit) VALUES(alt.`Name`,jetzt());
Ende

3. Trigger verwenden

Testen Sie es: Fügen Sie ein neues Datenelement hinzu

einfügen in stu (Name, Alter) VALUES('Name',36)

Zeigen Sie die stu-Tabelle und die stu_log-Tabelle an:

Wie in der Abbildung zu sehen, hat der Trigger gewirkt!

Testen des Löschens eines Datenelements

LÖSCHEN aus stu, wo Name = ‚Li Bai‘

Zeigen Sie die stu-Tabelle und die stu_log-Tabelle an:

Wie in der Abbildung zu sehen, hat der Trigger gewirkt!

Oben finden Sie ausführliche Informationen zur Verwendung und zum Verständnis von MySQL-Triggern. Weitere Informationen zu MySQL-Triggern finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der MySQL-Datenbank-Trigger
  • MySQL-Triggersyntax und Anwendungsbeispiele
  • MySQL-Triggerprinzip und Analyse von Anwendungsbeispielen
  • Einführung in die Verwendung sowie Vor- und Nachteile von MySQL-Triggern

<<:  Beispiel für reines CSS zum Ändern des Bildlaufleistenstils des Browsers

>>:  Detaillierte Analyse der untergeordneten und übergeordneten Vue-Komponenten

Artikel empfehlen

So fragen Sie Datum und Uhrzeit in MySQL ab

Vorwort: Bei der Projektentwicklung werden in ein...

20 JS-Abkürzungsfähigkeiten zur Verbesserung der Arbeitseffizienz

Inhaltsverzeichnis Wenn Sie mehrere Variablen gle...

CSS-Implementierungscode zum Zeichnen von Dreiecken (Rahmenmethode)

1. Implementieren Sie ein einfaches Dreieck Mithi...

Einige Tipps zur richtigen Verwendung des HTML-Titelattributs

Wenn Sie Inhalte vor Benutzern von Telefonen, Tabl...

Details zu benutzerdefinierten Vue3-Anweisungen

Inhaltsverzeichnis 1. Benutzerdefinierte Anweisun...

Wesentliche bedingte Abfrageanweisungen für MySQL-Datenbanken

Inhaltsverzeichnis 1. Grundlegende Grammatik 2. F...

Einstellen der Engine MyISAM/InnoDB beim Erstellen einer Datentabelle in MySQL

Als ich MySQL konfiguriert habe, habe ich die Sta...

Detaillierte Erklärung zum Schreiben von MySQL ungleich null und gleich null

1. Tabellenstruktur 2. Tabellendaten 3. Das Abfra...

Detailliertes Tutorial zum Konfigurieren der lokalen Yum-Quelle in CentOS8

Die Centos8-Distribution wird über die BaseOS- un...

Installationsschritte von Docker-CE auf dem Raspberry Pi 4b Ubuntu19-Server

Das Raspberry Pi-Modell ist 4b, 1 G RAM. Das Syst...