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

Front-End-JavaScript versteht Funktions-Currying gründlich

Inhaltsverzeichnis 1. Was ist Curry 2. Verwendung...

Detaillierte Analyse der MySQL-Indizes

Vorwort Wir wissen, dass die Indexauswahl Aufgabe...

Vue implementiert Drag-Fortschrittsbalken

In diesem Artikelbeispiel wird der spezifische Co...

Vue implementiert Countdown-Funktion

In diesem Artikelbeispiel wird der spezifische Co...

Docker installiert und führt den RabbitMQ-Beispielcode aus

Ziehen Sie das Bild: [mall@VM_0_7_centos ~]$ sudo...

MySQL InnoDB-Quellcodeanalyse für Transaktionssperren

Inhaltsverzeichnis 1. Schloss und Riegel 2. Wiede...

Eine eingehende Analyse von MySQL erläutert die Verwendung und die Ergebnisse

Vorwort Bei unserer täglichen Arbeit führen wir m...

So erstellen Sie eine Testdatenbank mit zig Millionen Testdaten in MySQL

Manchmal müssen Sie basierend auf der offiziell v...

Lösung für das Problem des MySQL-Master-Slave-Switch-Kanals

Nach der VIP-Konfiguration wird beim Aktiv/Standb...