Detaillierte Erläuterung des MySQL-Trigger-Trigger-Beispiels

Detaillierte Erläuterung des MySQL-Trigger-Trigger-Beispiels

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.

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 Branch 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] #Definieren Sie eine Variable und geben Sie einen Standardwert an SET var_name = value #Weisen Sie einer Variablen einen Wert zu

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 einer neu hinzugefügten Zeile OLD.columnname: eine Datenspalte in einer gelöschten 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 den 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.

Egal in welcher Branche Sie tätig sind, es reicht aus, zwei Dinge gut zu machen: das eine ist Ihr Beruf und das andere ist Ihr Charakter. Der Beruf bestimmt Ihre Existenz und der Charakter bestimmt Ihr Netzwerk. Der Rest ist Beharrlichkeit und mehr Vertrauen gewinnen mit Freundlichkeit, Professionalität und Aufrichtigkeit.

Dieser Artikel endet hier. Ich hoffe, er kann Ihnen helfen. Ich hoffe auch, dass Sie mehr Inhalt auf 123WORDPRESS.COM lesen können!

Das könnte Sie auch interessieren:
  • Themenverfeinerung für MySQL-Ereignisse und -Trigger
  • MySQL-Datenbank-Trigger vom Anfänger bis zum Profi
  • Erste Schritte mit gespeicherten Prozeduren, Triggern und Ereignisplanern in MySQL
  • Einführung in die Verwendung sowie Vor- und Nachteile von MySQL-Triggern
  • Detaillierte Erläuterung der Idee des MySQL-Triggers zur Echtzeiterkennung einer Anweisung zum Sichern und Löschen
  • Verwendung von MySQL-Triggern
  • Ein Artikel, der Ihnen ein tiefes Verständnis von Mysql-Triggern vermittelt
  • Verwendung von MySQL-Triggern
  • Verwendung von MySQL-Triggern einfach erklärt

<<:  Reines CSS, um coole Neonlichteffekte zu erzielen (mit Demo)

>>:  So verwenden Sie den Flat Style zum Gestalten von Websites

Artikel empfehlen

Lösung für das Problem ungültiger Breiteneinstellungen für Label und Span

Standardmäßig ist die Einstellung der Breite für B...

Methoden des adaptiven Webdesigns (gutes Zugriffserlebnis auf Mobiltelefonen)

1. Fügen Sie dem HTML-Header das Viewport-Tag hin...

Zusammenfassung der MySQL-Nutzungsspezifikationen

1. Es muss die InnoDB-Speicher-Engine verwendet w...

Detaillierte Erklärung des Linx awk-Einführungstutorials

Awk ist eine Anwendung zur Verarbeitung von Textd...

Detaillierte Erklärung zur Installation von PHP7 unter Linux

Wie installiere ich PHP7 unter Linux? 1. Installi...

So stellen Sie HBase mit Docker bereit

Standalone-HBase, lassen Sie uns zuerst darüber s...

Designtheorie: Zu den Themen Schema, Ressourcen und Kommunikation

<br />In vielen kleinen Unternehmen besteht ...

Eine kurze Diskussion über Shallow Copy und Deep Copy in JavaScript

Inhaltsverzeichnis 1. Direkte Zuordnung 2. Oberfl...

Nginx-Konfiguration zum Erreichen eines Lastenausgleichs auf mehreren Servern

Nginx-Lastausgleichsserver: IP: 192.168.0.4 (Ngin...

Koexistenz von Python2 und Python3 unter einem CentOS7-System

Der erste Schritt besteht darin, die Versionsnumm...

So installieren Sie den Chrome-Browser auf CentOS 7

Dieser Artikel beschreibt, wie Sie den Chrome-Bro...