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

Detaillierte Erläuterung der Protokollverarbeitung von Docker-Containern

Docker verfügt über viele Log-Plugins. Standardmä...

js realisiert die Lupenfunktion der Shopping-Website

In diesem Artikel wird der spezifische Code von j...

Detaillierte Erläuterung der 4 gängigen Datenquellen in Spark SQL

Allgemeine Lade-/Schreibmethoden Optionen manuell...

Detaillierte Analyse der Parameterdatei my.cnf von MySQL in Ubuntu

Vorwort Aufgrund meines MySQL-Verständnisses denk...

10 Best Practices zum Erstellen und Warten großer Vue.js-Projekte

Inhaltsverzeichnis 1. Nutzen Sie Slots, um Kompon...

Centos6.9-Installation Mysql5.7.18 Schrittaufzeichnung

Installationsreihenfolge rpm -ivh mysql-community...

Detaillierte Erläuterung des Garbage Collection-Mechanismus von JavaScript

Inhaltsverzeichnis Warum brauchen wir Garbage Col...

vue-table implementiert das Hinzufügen und Löschen

In diesem Artikelbeispiel wird der spezifische Co...

So ändern Sie den Standardspeicherort von Docker-Images (Lösung)

Aufgrund der anfänglichen Partitionierung des Sys...

Hinweise zur Zeitverwaltung des Linux-Kernel-Gerätetreibers

/****************** * Zeitverwaltung des Linux-Ke...

Warum sind die Bilder in mobilen Web-Apps nicht klar und sehr verschwommen?

Warum? Am einfachsten lässt es sich so ausdrücken:...

Die Rolle und Öffnung des MySQL-Protokolls für langsame Abfragen

Vorwort Das MySQL Slow Query Log ist ein Protokol...

Wann ist die Verwendung von dl, dt und dd sinnvoll?

dl: Definitionsliste Definitionsliste dt: Definiti...

Üben Sie die Verwendung von Golang, um mit der Docker-API zu spielen

Inhaltsverzeichnis Installieren des SDK Lokalen D...