Verwendung von MySQL-Triggern

Verwendung von MySQL-Triggern

Trigger können dazu führen, dass vor oder nach der Ausführung einer Anweisung anderer SQL-Code ausgeführt wird. Trigger können lesen, welche Daten durch die auslösende Anweisung geändert wurden, es gibt aber keinen Rückgabewert. Daher können Sie Trigger verwenden, um Geschäftslogikeinschränkungen durchzusetzen, ohne entsprechenden Code in der Anwendung zu schreiben.

Aus der obigen Beschreibung können wir ersehen, dass Trigger die Logik der Anwendung vereinfachen und die Leistung verbessern können. Dies liegt daran, dass durch die Verwendung von Triggern die Anzahl der Interaktionen zwischen der Anwendung und dem Server reduziert wird. Darüber hinaus helfen Trigger dabei, Normalisierung und Statistiken automatisch zu aktualisieren. Beispielsweise können wir Trigger verwenden, um den gesamten Transaktionsbetrag, die Anzahl der Bestellungen und den durchschnittlichen Bestellwert automatisch zu zählen. Allerdings sind die Anwendungsszenarien von MySQL-Triggern auch sehr begrenzt. Wenn Sie Trigger aus anderen Datenbankprodukten verwendet haben, gehen Sie nicht davon aus, dass MySQL dieselben Funktionen erreichen kann. Beispiel:

  • Jede Datentabelle kann nur einen Trigger für ein einzelnes Ereignis haben, was bedeutet, dass für ein Ereignis wie AFTER INSERT nicht mehr als ein Trigger gleichzeitig vorhanden sein kann.
  • MySQL unterstützt nur Trigger auf Zeilenebene, was bedeutet, dass Sie Trigger nur im Modus FOR EACH ROW anstelle der gesamten SQL-Anweisung verwenden können, was bei Vorgängen mit großen Datenmengen ineffizient ist. MySQL-Trigger können nur in der folgenden Form geschrieben werden:
CREATE TRIGGER Triggername VOR | NACH Triggerereignis ON Tabellenname FÜR JEDE ZEILE
BEGINNEN
    Anweisungsliste ausführen;
ENDE

Die Liste der Ausführungsanweisungen unterstützt einzelne oder mehrere Anweisungen. Im Folgenden finden Sie ein Beispiel für mehrere Anweisungen:

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

TRENNUNGSZEICHEN ;
  • Auslöser können dazu führen, dass die tatsächlich vom Server ausgeführte Arbeit unvorhersehbar ist, und eine einfache Anweisung kann dazu führen, dass der Server eine Menge unsichtbarer Arbeit erledigt. Wenn ein Trigger beispielsweise eine abhängige Tabelle aktualisiert, kann dies dazu führen, dass sich die Anzahl der betroffenen Zeilen verdoppelt.
  • Das Debuggen von Triggern ist schwierig und nach ihrer Einführung sind Leistungsengpässe schwer zu analysieren.
  • Trigger können potenzielle Wartezeiten bei Sperren und Deadlocks verursachen. Wenn der Trigger fehlschlägt, schlägt auch die Quellabfrage fehl. Diese Art des Spiels kann schwer zu erkennen sein, wenn Sie den Auslöser nicht kennen.

Die größte Einschränkung besteht im Design von FOR EACH ROW, das manchmal die Verwendung von Triggern zum Verwalten von Statistiken und Cache-Tabellen verhindert, da dies langsam sein kann. Der Hauptgrund für die Verwendung von Triggern besteht darin, dass sie im Vergleich zu geplanten synchronen Aktualisierungen die Datenkonsistenz konsistent aufrechterhalten können. Trigger können außerdem keine Atomarität garantieren. Beispielsweise kann ein Trigger, der eine MyISAM-Tabelle aktualisiert, nicht zurückgesetzt werden, wenn in der Quell-SQL-Anweisung ein Fehler auftritt. Darüber hinaus können die Auslöser selbst fehlerhaft sein. Wenn wir AFTER UPDATE basierend auf der MyISAM-Datentabelle verwenden, um eine andere Tabelle zu aktualisieren. Wenn beim Trigger ein Fehler auftritt, der dazu führt, dass die Operation an der zweiten Tabelle fehlschlägt, wird für die Operation an der ersten Tabelle kein Rollback ausgeführt.

Mit InnoDB-Trigger verbundene Operationen, einschließlich Quellanweisungen, erfolgen alle in derselben Transaktion und erfüllen daher die Atomaritätsanforderungen. Wenn Sie jedoch InnoDB-Trigger verwenden, um die Datenkonsistenz mit einer anderen Tabelle zu überprüfen, kann dies bei mangelnder Vorsicht zu falschen Ergebnissen führen. Wenn Sie beispielsweise Trigger zum Simulieren von Fremdschlüsseln verwenden müssen, können Sie mit einem BEFORE INSERT-Trigger überprüfen, ob ein entsprechender Datensatz in einer anderen Tabelle vorhanden ist. Wenn Sie jedoch SELECT FOR UPDATE nicht verwenden, wenn der Trigger Daten aus einer anderen Tabelle liest, können aufgrund von Parallelitätsproblemen falsche Ergebnisse auftreten. Obwohl der Auslöser einige Mängel aufweist, bedeutet das nicht, dass er nicht verwendet werden kann. Umgekehrt können Trigger auch allein nützlich sein, insbesondere für Einschränkungen, Systemwartungsaufgaben und die Aktualisierung von Statistiken.

Sie können Trigger auch verwenden, um Änderungen in Datenzeilen aufzuzeichnen. Auf diese Weise können sogar Aufzeichnungen manueller Offline-Datenbankvorgänge (wie etwa die Reparatur fehlerhafter Daten) aufgezeichnet werden. Beim Einfügen von Daten in andere Auto-Increment-Primärschlüsseltabellen ist jedoch Vorsicht geboten. Dies kann bei replizierten Anweisungen zu Problemen führen, da die Auto-Increment-Werte bei zwei identischen Replikaten unterschiedlich sind.

Abschluss:

Trigger können ihre Vorteile in begrenzten Situationen ausspielen, beispielsweise bei statistischen Daten, Änderungsprotokollen von Datentabellen usw. Es gibt jedoch auch einige Mängel. Beispielsweise verringert die Aktualisierung großer Datenmengen die Effizienz aufgrund der zeilenweisen Auslösung. Außerdem kann die MyISAM-Engine keine Atomizität garantieren. Daher ist es vom Anwendungsszenario abhängig, ob ein Trigger vorhanden ist.

Oben finden Sie detaillierte Informationen zur Verwendung von MySQL-Triggern. Weitere Informationen zu MySQL-Triggern finden Sie in den anderen verwandten Artikeln auf 123WORDPRESS.COM!

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
  • Detaillierte Erläuterung des MySQL-Trigger-Trigger-Beispiels
  • 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 einfach erklärt

<<:  JavaScript-Grundlagenoperatoren

>>:  Ein Debugging-Prozessprotokoll für chinesische Zeichentrickfiguren in der Startkonsole des Tomcat-Quellcodes

Artikel empfehlen

Detaillierte Schritte zur Verwendung von Arthas in einem Docker-Container

Was kann Arthas für Sie tun? Arthas ist das Open-...

Detaillierter Prozess zur Konfiguration von NIS in Centos7

Inhaltsverzeichnis Prinzip Vorbereitung der Netzw...

So löschen Sie verstümmelte oder mit Sonderzeichen versehene Dateien in Linux

Aus Kodierungsgründen werden beim Hochladen oder ...

Beispiel zum Aktivieren langsamer Abfragen in MySQL

Vorwort Das langsame Abfrageprotokoll ist eine se...

Einführung in die Funktionen und Verwendung von Wert- und Namensattributen in HTML

1. Der in der Schaltfläche verwendete Wert bezieht...

Beispiele für die Verwendung von DD DT DL-Tags

Normalerweise verwenden wir die Tags <ul><...

So führen Sie Linux-Shell-Befehle in Docker aus

Um einen Shell-Befehl in Docker auszuführen, müss...

Tipps zum reflektierenden Lernen von JavaScript

Inhaltsverzeichnis 1. Einleitung 2. Schnittstelle...

Die 13 am häufigsten in Interviews gestellten Fragen zu Vue-Modifikatoren

Inhaltsverzeichnis 1. faul 2.trimmen 3.Nummer 4.H...

Vue basierend auf einer Element-Button-Berechtigungsimplementierungslösung

Hintergrundanforderungen: Das ERP-System muss ein...

Zusammenfassung von 3 Möglichkeiten zum verzögerten Laden eines Vue-Routers

Kein Lazy Loading verwenden importiere Vue von „v...

So stellen Sie K8s in Docker bereit

K8s k8s ist ein Cluster. Es gibt mehrere Namespac...