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

Mysql teilt Zeichenfolge durch gespeicherte Prozedur in Array auf

Um einen String in ein Array aufzuteilen, müssen ...

JS beherrscht schnell die Verwendung von ES6-Klassen

1. Wie konstruieren? Lassen Sie uns die allgemein...

11 Beispiele für die erweiterte Verwendung von Eingabeelementen in Webformularen

1. Löschen Sie das gepunktete Feld, wenn die Scha...

Praxis der Vue Global Custom-Anweisung Modal Drag

Inhaltsverzeichnis Hintergrund Umsetzungsideen Er...

Detailliertes Tutorial zur Installation von MariaDB auf CentOS 8

Das Datenbankverwaltungssystem MariaDB ist ein Zw...

43 Webdesign-Fehler, auf die Webdesigner achten sollten

Dies ist ein Artikel über die Benutzerfreundlichk...

Vue + Element zur dynamischen Anzeige von Hintergrunddaten zu Optionen

brauchen: Implementieren Sie die dynamische Anzei...

Ein Problem mit der Bereitstellung von MySQL 5.5

MySQL-Bereitstellung Derzeit stellt das Unternehm...

Neue Features in MySQL 8: Unsichtbare Indizes

Hintergrund Indizes sind ein zweischneidiges Schw...

Implementierung der Vue-Anmeldefunktion

Inhaltsverzeichnis Vorne geschrieben Anmeldeübers...

Detaillierte Analyse von MySQL-Ausführungsplänen

Vorwort Als wir im vorherigen Interviewprozess na...