Detaillierte Erklärung des MySQL-Triggerbeispiels

Detaillierte Erklärung des MySQL-Triggerbeispiels

MySQL scheint seit Version 5.0.2 Trigger zu unterstützen. In diesem Blog werden Trigger vorgestellt. Lassen Sie uns zunächst über die Konzepte sprechen:

Was ist ein Auslöser

Ein Trigger ist ein mit einer Tabelle verknüpftes Datenbankobjekt, das ausgelöst wird, wenn die definierten Bedingungen erfüllt sind, und die im Trigger definierte Anweisungsgruppe ausführt. Diese Triggerfunktion kann Anwendungen dabei helfen, die Datenintegrität auf der Datenbankseite sicherzustellen.

Wenn Sie beispielsweise jetzt zwei Tabellen haben [Benutzertabelle] und [Protokolltabelle], müssen Sie beim Erstellen eines Benutzers das Erstellungsprotokoll in die Protokolltabelle einfügen. Wenn Sie keine Trigger verwenden, müssen Sie eine Programmiersprachenlogik schreiben, um dies zu erreichen. Wenn Sie jedoch einen Trigger definieren, besteht die Rolle des Triggers darin, Ihnen beim Einfügen einer Protokollnachricht in die Protokolltabelle zu helfen, nachdem Sie ein Datenelement in die Benutzertabelle eingefügt haben. Natürlich sind Trigger nicht auf Einfügeoperationen beschränkt, sondern können auch Änderungen und Löschungen durchführen.

Erstellen eines Triggers

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 eines Triggers mit mehreren Ausführungsanweisungen

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

Der Ausführungsanweisungslistenparameter zwischen BEGIN und END gibt mehrere auszuführende Anweisungen an, wobei die einzelnen Anweisungen durch Semikolons getrennt sind.

Tipps: Im Allgemeinen verwendet MySQL standardmäßig ; als Ende der Ausführungsanweisung, was mit dem im Trigger erforderlichen Zweig in Konflikt steht

Um dieses Problem zu lösen, können Sie DELIMITER verwenden, z. B.: DELIMITER ||, wodurch das Endsymbol in || geändert werden kann.

Nachdem der Trigger erstellt wurde, können Sie DELIMITER ; verwenden, um das Endsymbol in ; zu ändern.

mysql> TRENNUNGSZEICHEN ||
mysql> TRIGGER-Demo VOR DEM LÖSCHEN ERSTELLEN
  -> EIN Benutzer FÜR JEDE ZEILE
  -> BEGIN
  -> IN Logs einfügen Werte (JETZT());
  -> IN Logs einfügen Werte (JETZT());
  -> ENDE
  -> ||
Abfrage OK, 0 Zeilen betroffen (0,06 Sek.)

mysql> TRENNUNGSZEICHEN ;

In der obigen Anweisung wird das Endsymbol am Anfang als || definiert und in der Mitte ein Trigger. Sobald ein Löschvorgang die Bedingungen erfüllt,

Die Anweisungen in BEGIN und END werden ausgeführt und enden dann mit ||

Verwenden Sie abschließend DELIMITER ;, um das Endsymbol wiederherzustellen

tigger_event:

Die Anweisung „load data“ fügt den Inhalt der Datei in die Tabelle ein, was einer Anweisung „insert“ entspricht. Die Anweisung „replace“ ähnelt im Allgemeinen der Anweisung „insert“. Wenn die Tabelle jedoch einen primären oder eindeutigen Index enthält und die eingefügten Daten mit dem ursprünglichen Primärschlüssel oder eindeutig übereinstimmen, werden die ursprünglichen Daten gelöscht und neue Daten hinzugefügt. Daher ist die Ausführung einer Anweisung „replace“ manchmal gleichbedeutend mit der Ausführung einer Anweisung „delete“ und „insert“.

Ein Trigger kann eine einzelne SQL-Anweisung oder mehrere SQL-Codeblöcke sein. Wie erstelle ich einen?

DELIMITER $ #Ändern Sie das Anweisungstrennzeichen in $
BEGINNEN
SQL1;
SQL2;
...
SQL-Befehle
ENDE $
DELIMITER ; #Ändern Sie das Anweisungstrennzeichen zurück zum ursprünglichen Semikolon ";"
Sie können Variablen auch in der BEGIN...END-Anweisung definieren, sie können jedoch nur innerhalb der BEGIN...END-Anweisung verwendet werden:
DECLARE var_name var_type [DEFAULT value] #Variablen definieren und Standardwerte angeben
SET var_name = value # Einer Variablen einen Wert zuweisen
Verwendung von NEU und ALT:

Gemäß der obigen Tabelle können Sie für die entsprechenden Daten folgendes Format verwenden:

NEW.columnname: eine Datenspalte in der neu hinzugefügten Zeile
OLD.columnname: Löscht eine Datenspalte in der Zeile
Nachdem das gesagt ist, erstellen wir jetzt einen Auslöser!

Nun sieht die Tabelle wie folgt aus:

Benutzertabelle

CREATE TABLE `Benutzer` (
 `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
 `name` varchar(255) ZEICHENSATZ utf8mb4 STANDARD NULL,
 `add_time` int(11) DEFAULT NULL,
 Primärschlüssel (`id`),
 SCHLÜSSEL `name` (`name`(250)) USING BTREE
) ENGINE=MyISAM AUTO_INCREMENT=1000001 DEFAULT CHARSET=latin1;

Protokolltabelle:

CREATE TABLE `logs` (
 `Id` int(11) NICHT NULL AUTO_INCREMENT,
 `log` varchar(255) DEFAULT NULL COMMENT 'Protokollbeschreibung',
 PRIMÄRSCHLÜSSEL (`Id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='Protokolltabelle';

Die Anforderung lautet: Wenn ein Datenelement in Benutzer eingefügt wird, wird eine Protokollnachricht in Protokollen generiert.

Erstellen Sie einen Trigger:

TRENNUNGSZEICHEN $
Erstellen Sie den Trigger user_log nach dem Einfügen für Benutzer für jede Zeile
BEGINNEN
DECLARE s1 VARCHAR(40) Zeichensatz utf8;
DECLARE s2 VARCHAR (20) Zeichensatz utf8;#Später wurde festgestellt, dass die chinesische Zeichenkodierung verstümmelt war, daher wurde der Zeichensatz hier festgelegt SET s2 = " wird erstellt";
SET s1 = CONCAT(NEW.name,s2); #CONCAT-Funktion kann Zeichenfolgen verbinden INSERT INTO logs(log) values(s1);
ENDE $
TRENNUNGSZEICHEN ;

Hier verwende ich Navicat:

Trigger anzeigen SHOW TRIGGERS-Anweisung zum Anzeigen von Triggerinformationen

Tipp:

Ich habe Navicat verwendet, um es direkt zu erstellen. Wenn Sie MySQL Front verwenden, ist der Name anders. Lassen Sie uns den Trigger löschen und ihn in MySQL Front testen.

drop trigger user_log;#Trigger löschen

Öffnen Sie die Mysql-Front:

Wenn MySQL SQL vorkompiliert, muss es das Endtrennzeichen nicht definieren. Das geänderte SQL kann direkt wie folgt lauten:

#DELIMITER $
Erstellen Sie den Trigger user_log nach dem Einfügen für Benutzer für jede Zeile
BEGINNEN
DECLARE s1 VARCHAR(40) Zeichensatz utf8;
DECLARE s2 VARCHAR(20) Zeichensatz utf8;
SET s2 = " wird erstellt";
SET s1 = CONCAT(NEW.name,s2); #CONCAT-Funktion kann Zeichenfolgen verbinden INSERT INTO logs(log) values(s1);
ENDE #$
#TRENNZEICHEN ;

Hier noch ein paar Worte:

Tipps: Die Anweisung SHOW TRIGGERS kann den angegebenen Trigger nicht abfragen

Anzeigen von Triggerinformationen in der Triggertabelle

WÄHLEN SIE * AUS information_schema.triggers;

Das Ergebnis zeigt die Detailinformationen aller Trigger. Gleichzeitig kann diese Methode die Detailinformationen des angegebenen Triggers abfragen.

Wählen Sie * aus information_schema.triggers, wobei TRIGGER_NAME = 'Benutzerprotokoll' ist.

Tipps: Alle Triggerinformationen werden in der Triggertabelle unter der Datenbank information_schema gespeichert.

Sie können die SELECT-Anweisung zur Abfrage verwenden. Wenn zu viele Triggerinformationen vorhanden sind, ist es am besten, die Abfrage über das Feld TRIGGER_NAME anzugeben

Zurück zum Anfang. Wir haben den Trigger erstellt, fahren mit dem Einfügen von Daten in Benutzer und dem Anzeigen der Daten fort:

in Benutzer einfügen (Name, Add_Time) Werte (,Jetzt hinzufügen‘, jetzt());

Okay, überprüfen wir die Protokolltabelle noch einmal!

Aus dem obigen Beispiel können Sie ersehen, dass Sie nur die Benutzerinformationen in Benutzer einfügen müssen und das Protokoll automatisch in der Protokolltabelle aufgezeichnet wird. Dies ist möglicherweise der Komfort, den Trigger für mich bieten!

Einschränkungen und Überlegungen

Für Trigger gelten die folgenden zwei Einschränkungen:

1. Trigger können weder gespeicherte Prozeduren aufrufen, die Daten an den Client zurückgeben, noch dynamische SQL-Anweisungen verwenden, die die CALL-Anweisung verwenden. Gespeicherte Prozeduren dürfen jedoch Daten über Parameter an Trigger zurückgeben. Mit anderen Worten: Gespeicherte Prozeduren oder Funktionen können Daten über Parameter vom Typ OUT oder INOUT an Trigger zurückgeben, aber Prozeduren, die Daten direkt zurückgeben, können nicht aufgerufen werden.

2. Anweisungen, die Transaktionen explizit oder implizit starten oder beenden, wie etwa START TRANS-ACTION, COMMIT oder ROLLBACK, können in Triggern nicht verwendet werden.

Hinweis: MySQL-Trigger werden in der Reihenfolge BEFORE-Trigger, Zeilenoperationen und AFTER-Trigger ausgeführt. Wenn in einem Schritt ein Fehler auftritt, werden die verbleibenden Operationen nicht ausgeführt. Wenn während Operationen an Transaktionstabellen ein Fehler auftritt, werden die Operationen zurückgesetzt. Wenn Operationen an Nicht-Transaktionstabellen ausgeführt werden, können sie nicht zurückgesetzt werden und die Daten können falsch sein.

Zusammenfassen

Trigger werden basierend auf Zeilen ausgelöst, daher können Lösch-, Hinzufügungs- oder Änderungsvorgänge Trigger aktivieren. Schreiben Sie daher keine zu komplexen Trigger und fügen Sie nicht zu viele Trigger hinzu. Dies hat schwerwiegende Auswirkungen auf das Einfügen, Ändern oder Löschen von Daten und führt außerdem zu schlechter Portabilität. Daher müssen Sie dies beim Entwerfen von Triggern berücksichtigen.

Ein Trigger ist eine spezielle gespeicherte Prozedur, die ausgeführt wird, wenn Daten in einer bestimmten Tabelle eingefügt, gelöscht oder geändert werden. Er verfügt über ausgefeiltere und komplexere Datensteuerungsfunktionen als die Standardfunktionen der Datenbank selbst.

Datenbanktrigger haben folgende Funktionen:

1. Sicherheit. Basierend auf den Werten der Datenbank können Benutzern bestimmte Rechte zum Bedienen der Datenbank eingeräumt werden.

# Sie können Benutzervorgänge zeitlich einschränken. Beispielsweise können Sie Datenbankdaten nach der Arbeit oder im Urlaub nicht ändern.

# Sie können Benutzervorgänge basierend auf den Daten in der Datenbank einschränken, indem Sie beispielsweise nicht zulassen, dass der Aktienkurs auf einmal um mehr als 10 % steigt.

2. Prüfung. Kann Benutzervorgänge in der Datenbank verfolgen.

# Von Benutzern zum Bedienen der Datenbank verwendete Prüfanweisungen.

# Schreiben Sie die Aktualisierungen des Benutzers in die Datenbank in die Prüftabelle.

3. Implementieren Sie komplexe Datenintegritätsregeln

# Implementieren Sie nicht standardmäßige Datenintegritätsprüfungen und -einschränkungen. Auslöser können komplexere Einschränkungen erstellen als Regeln. Im Gegensatz zu Regeln können Trigger auf Spalten oder Datenbankobjekte verweisen. Ein Auslöser könnte beispielsweise jeden Versuch zum Abschluss von Futures verhindern, die die eigene Marge überschreiten.

# Bietet veränderbare Standardwerte.

4. Implementieren Sie komplexe, nicht standardmäßige Datenbank-bezogene Integritätsregeln. Trigger können serielle Aktualisierungen an verwandten Tabellen in der Datenbank durchführen. Beispielsweise kann ein Löschauslöser für die Spalte „author_code“ der Auths-Tabelle entsprechende Löschungen übereinstimmender Zeilen in anderen Tabellen bewirken.

# Beim Ändern oder Löschen übereinstimmende Zeilen in anderen Tabellen kaskadierend ändern oder löschen.

# Setzen Sie beim Ändern oder Löschen die übereinstimmenden Zeilen in anderen Tabellen auf NULL-Werte.

# Setzen Sie beim Ändern oder Löschen die übereinstimmenden Zeilen in anderen Tabellen kaskadierend auf den Standardwert.

# Trigger können Änderungen ablehnen oder rückgängig machen, die die relevante Integrität zerstören, und Transaktionen abbrechen, die versuchen, Daten zu aktualisieren. Dieser Trigger wird ausgelöst, wenn ein Fremdschlüssel eingefügt wird, der nicht mit seinem Primärschlüssel übereinstimmt. Sie können beispielsweise einen Einfügeauslöser für die Spalte „books.author_code“ erstellen, sodass der Einfügevorgang rückgängig gemacht wird, wenn der neue Wert nicht mit einem Wert in der Spalte „auths.author_code“ übereinstimmt.

5. Kopieren Sie die Daten synchron und in Echtzeit in die Tabelle.

6. Berechnen Sie Datenwerte automatisch und führen Sie eine spezifische Verarbeitung durch, wenn der Datenwert bestimmte Anforderungen erreicht. Wenn beispielsweise die Mittel auf dem Konto des Unternehmens weniger als 50.000 Yuan betragen, werden sofort Warndaten an das Finanzpersonal gesendet.

Dies ist das Ende dieses Artikels mit der detaillierten Erklärung von MySQL-Triggerbeispielen. Weitere relevante MySQL-Triggerbeispielinhalte finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung der MySQL-Datenbank-Trigger
  • MySQL verwendet Trigger, um das Zeilenlimit der Tabelle in der Datenbank zu lösen. Detaillierte Erklärung und Beispiele
  • Erste Schritte mit gespeicherten Prozeduren, Triggern und Ereignisplanern in MySQL
  • Detaillierte Erläuterung des MySQL-Trigger-Trigger-Beispiels
  • Einführung in die Verwendung sowie Vor- und Nachteile von MySQL-Triggern
  • Verwendung von MySQL-Triggern
  • Ein Artikel, der Ihnen ein tiefes Verständnis von Mysql-Triggern vermittelt
  • Verwendung von MySQL-Triggern
  • MySQL-Datenbank-Trigger vom Anfänger bis zum Profi

<<:  JavaScript-Sandbox-Erkundung

>>:  Hexadezimale Farbcodes (vollständig)

Artikel empfehlen

CocosCreator Universal Framework Design Network

Inhaltsverzeichnis Vorwort WebSocket verwenden Er...

Spezifische Verwendung von CSS-Inhaltsattributen

Das Inhaltsattribut wird im Allgemeinen in den Ps...

Allgemeine Befehle für MySQL-Autorisierung, Start und Dienststart

1. Vier Startmethoden: 1.mysqld Starten Sie den M...

Detailliertes Tutorial zur MySQL-Installation und -Konfiguration

Inhaltsverzeichnis Installationsfreie Version von...

Grafisches Tutorial zur Offline-Installation und Konfiguration von MySQL 8.0.2

Die Offline-Installationsmethode von MySQL_8.0.2 ...

Zusammenfassung der zwölf Methoden der Vue-Wertübertragung

Inhaltsverzeichnis 1. Vom Vater zum Sohn 2. Vom S...

Verwenden Sie HTML und CSS, um Ihren eigenen warmen Mann „Dabai“ zu erstellen.

Das Endergebnis sieht so aus, ist es nicht süß … ...

Lösung - BASH: /HOME/JAVA/JDK1.8.0_221/BIN/JAVA: Unzureichende Berechtigungen

1) Geben Sie den Ordnerpfad ein, in dem die JDK-D...

Einführung in die Verwendung der unbestimmten Eigenschaft des Kontrollkästchens

Wenn wir das Dialogfeld „Ordnereigenschaften“ in W...

Besprechen Sie den Wert von Webstandards aus vier Aspekten mit einer Mindmap

Ich habe einige Werte grob aufgelistet, um die Di...

Implementierungsmethode für HTML-Neun-Raster-Layouts

Die Diversifizierung von Website-Layouts ist unse...

Zusammenfassung der allgemeinen MySQL-Funktionen

Vorwort: Die MySQL-Datenbank bietet eine breite P...