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öserEin 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 TriggersDie 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. 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:
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 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 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 ÜberlegungenFü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. ZusammenfassenTrigger 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.
2. Prüfung. Kann Benutzervorgänge in der Datenbank verfolgen.
3. Implementieren Sie komplexe Datenintegritätsregeln
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.
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:
|
<<: Reines CSS, um coole Neonlichteffekte zu erzielen (mit Demo)
>>: So verwenden Sie den Flat Style zum Gestalten von Websites
Standardmäßig ist die Einstellung der Breite für B...
1. Fügen Sie dem HTML-Header das Viewport-Tag hin...
1. Es muss die InnoDB-Speicher-Engine verwendet w...
Awk ist eine Anwendung zur Verarbeitung von Textd...
Wie installiere ich PHP7 unter Linux? 1. Installi...
Zuvor habe ich die Verwendung der charAt()-Method...
Durch Zufall entdeckte ich, dass eine SQL-Anweisu...
1. Einleitung Heute hat mich ein Kollege gefragt,...
Standalone-HBase, lassen Sie uns zuerst darüber s...
<br />In vielen kleinen Unternehmen besteht ...
Inhaltsverzeichnis 1. Direkte Zuordnung 2. Oberfl...
Nginx-Lastausgleichsserver: IP: 192.168.0.4 (Ngin...
Der erste Schritt besteht darin, die Versionsnumm...
Die Version von vsCode wurde in den letzten Tagen...
Dieser Artikel beschreibt, wie Sie den Chrome-Bro...