Einführung in die Verwendung sowie Vor- und Nachteile von MySQL-Triggern

Einführung in die Verwendung sowie Vor- und Nachteile von MySQL-Triggern

Vorwort

Bei der tatsächlichen Entwicklung stoßen wir häufig auf eine solche Situation: Es gibt zwei oder mehr miteinander verbundene Tabellen, beispielsweise werden Produktinformationen und Bestandsinformationen in zwei verschiedenen Datentabellen gespeichert. Wenn wir einen neuen Produktdatensatz hinzufügen, müssen wir, um die Integrität der Daten sicherzustellen, der Bestandstabelle auch einen Bestandsdatensatz hinzufügen.

In diesem Fall müssen wir diese beiden zugehörigen Operationsschritte in das Programm schreiben und sie mit Transaktionen umschließen, um sicherzustellen, dass die beiden Operationen zu einer atomaren Operation werden, d. h. entweder werden alle oder keine ausgeführt.

Unter besonderen Umständen müssen Sie die Daten möglicherweise manuell pflegen. Dabei kann es leicht passieren, dass Sie einen Schritt vergessen, was zu Datenverlust führt. Zu diesem Zeitpunkt können wir Trigger verwenden.

Sie können einen Trigger erstellen, sodass der Einfügevorgang für Produktinformationsdaten automatisch den Einfügevorgang für Bestandsdaten auslöst. Auf diese Weise müssen Sie sich keine Sorgen über fehlende Daten machen, weil Sie vergessen haben, Bestandsdaten hinzuzufügen.

1. Trigger-Übersicht

MySQL unterstützt Trigger ab Version 5.0.2. MySQL-Trigger sind wie gespeicherte Prozeduren in den MySQL-Server eingebettete Programme.

Ein Trigger ist ein Ereignis, das eine Aktion auslöst, darunter INSERT-, UPDATE- und DELETE-Ereignisse. Ein Ereignis bezieht sich auf eine Aktion eines Benutzers oder das Auslösen eines Verhaltens. Wenn ein Trigger definiert ist und die Datenbank diese Anweisungen ausführt, entspricht dies dem Eintreten eines Ereignisses, und der Trigger wird automatisch ausgelöst, um die entsprechende Operation auszuführen. Wenn beim Einfügen, Aktualisieren und Löschen von Daten in eine Datentabelle eine Datenbanklogik automatisch ausgeführt werden muss, können Trigger zur Implementierung verwendet werden.

2. Erstellen von Triggern

2.1 Triggersyntax erstellen

Die Syntax zum Erstellen eines Triggers lautet:

CREATE TRIGGER Triggername {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON Tabellenname FÜR JEDE ZEILE
Der vom Trigger ausgeführte Anweisungsblock;

veranschaulichen:

①Tabellenname: Gibt das vom Trigger überwachte Objekt an.

②VORHER|NACHHER: gibt die Auslösezeit an. VORHER bedeutet Auslösen vor dem Ereignis; NACHHER bedeutet Auslösen nach dem Ereignis.

③INSERT|UPDATE|DELETE: zeigt das ausgelöste Ereignis an.

INSERT bedeutet, einen Datensatz einzufügen;

UPDATE bedeutet, Datensätze zu aktualisieren;

LÖSCHEN bedeutet, einen Datensatz zu löschen.

④ Der vom Trigger ausgeführte Anweisungsblock: Dies kann eine einzelne SQL-Anweisung oder ein zusammengesetzter Anweisungsblock sein, der aus der Struktur BEGIN...END besteht.

2.2 Codebeispiele

Beispiel:

①Erstellen Sie eine Datentabelle:

Tabelle erstellen Testtrigger (
Ich würde INT PRIMARY KEY AUTO_INCREMENT,
t_note VARCHAR(30)
);

Tabelle erstellen test_trigger_log (
Ich würde INT PRIMARY KEY AUTO_INCREMENT,
t_log VARCHAR(30)
);

② Erstellen Sie einen Trigger: Erstellen Sie einen Trigger mit dem Namen „before_insert“ und fügen Sie die „before_insert“-Protokollinformationen in die „test_trigger_log“-Datentabelle ein, bevor Sie Daten in die „test_trigger“-Datentabelle einfügen.

TRENNUNGSZEICHEN //
CREATE TRIGGER before_insert
VOR DEM INSERT ON test_trigger
FÜR JEDE REIHE
BEGINNEN
	INSERT INTO test_trigger_log (t_log)
	WERTE('vor_Einfügen');
ENDE //
TRENNUNGSZEICHEN ;

③Fügen Sie Daten in die test_trigger-Datentabelle ein

INSERT INTO test_trigger (t_note) VALUES ('Test VOR INSERT-Trigger');

④ Zeigen Sie die Daten in der Datentabelle test_trigger_log an

mysql> AUSWÄHLEN * AUS test_trigger_log;
+----+---------------+
| Ich würde | t_log |
+----+---------------+
| 1 | vor_Einfügen |
+----+---------------+
1 Zeile im Satz (0,00 Sek.)

3. Trigger anzeigen und löschen

3.1 Auslöser anzeigen

Beim Anzeigen von Triggern werden die Definition, der Status und die Syntaxinformationen von Triggern angezeigt, die bereits in der Datenbank vorhanden sind.

Methode 1: Anzeigen der Definitionen aller Trigger in der aktuellen Datenbank

TRIGGERS ANZEIGEN\G

Methode 2: Anzeigen der Definition eines Triggers in der aktuellen Datenbank

SHOW CREATE TRIGGER Triggername

Methode 3: Abfrage der Informationen des Triggers „salary_check_trigger“ aus der Tabelle TRIGGERS in der Systembibliothek information_schema

WÄHLEN SIE * AUS information_schema.TRIGGERS;

3.2 Löschen eines Triggers

Trigger sind ebenfalls Datenbankobjekte. Um einen Trigger zu löschen, verwenden Sie die DROP-Anweisung. Die Syntax lautet wie folgt:

DROP TRIGGER IF EXISTS - Triggername;

4. Vor- und Nachteile von Triggern

4.1 Vorteile

① Trigger können die Integrität der Daten sicherstellen.

Angenommen, wir verwenden die Kopftabelle der Bestellung (demo.importhead), um die Gesamtinformationen der Bestellung zu speichern, einschließlich der Bestellnummer, Lieferantennummer, Lagernummer, Gesamtkaufmenge, Gesamtkaufbetrag und des Annahmedatums.

Bildbeschreibung hier einfügen

Verwenden Sie die Tabelle mit den Bestelldetails (demo.importdetails), um die Details der gekauften Waren zu speichern, einschließlich Bestellnummer, Produktnummer, Kaufmenge, Kaufpreis und Kaufbetrag.

Bildbeschreibung hier einfügen

Wenn wir Detaildaten einer Bestellung eingeben, löschen oder ändern, ändern sich die Daten in der Detailtabelle der Bestellung. Zu diesem Zeitpunkt müssen die Gesamtmenge und der Gesamtbetrag in der Kopftabelle der Bestellung neu berechnet werden. Andernfalls stimmen die Gesamtmenge und der Gesamtbetrag in der Kopftabelle der Bestellung nicht mit der Gesamtmenge in der Tabelle mit den Bestelldetails überein.

Berechnung und Betrag werden addiert, hierin liegt die Inkonsistenz der Daten.

Um dieses Problem zu lösen, können wir Trigger verwenden, um automatisch zwei Schritte auszulösen, wenn in der Tabelle mit den Bestelldetails Daten eingefügt, geändert oder gelöscht werden:

1) Berechnen Sie die Gesamtmenge und den Gesamtbetrag in der Tabelle mit den Bestelldetails neu.

2) Verwenden Sie die im ersten Schritt berechneten Werte, um die Gesamtmenge und den Gesamtbetrag in der Kopftabelle der Bestellung zu aktualisieren.

Auf diese Weise stimmen die Werte für Gesamtmenge und Gesamtbetrag in der Kopftabelle der Bestellung immer mit den in der Tabelle mit den Bestelldetails berechneten Werten für Gesamtmenge und Gesamtbetrag überein, und die Daten sind konsistent und widersprechen sich nicht.

② Trigger können uns dabei helfen, Betriebsprotokolle aufzuzeichnen.

Mithilfe von Triggern können Sie genau aufzeichnen, was wann passiert ist. Ein gutes Beispiel ist beispielsweise die Aufzeichnung des Auslösers für die Änderung des Mitgliedseinzahlungsbetrags. Dies ist für uns sehr hilfreich, um das spezifische Szenario wiederherzustellen, als der Vorgang ausgeführt wurde, und die Ursache des Problems besser zu lokalisieren.

③ Trigger können auch verwendet werden, um die Legitimität von Daten zu überprüfen, bevor sie verarbeitet werden.

Wenn beispielsweise ein Supermarkt Waren einkauft, ist der Lagerleiter verpflichtet, den Einkaufspreis einzugeben. Bei der menschlichen Arbeit können jedoch leicht Fehler passieren. Beispielsweise wird bei der Eingabe der Menge der Barcode eingescannt. Bei der Eingabe des Betrags wird die Zeile falsch gelesen und der eingegebene Preis ist viel höher als der Verkaufspreis, was zu enormen Verlusten in den Büchern führt. Dies kann durch Trigger geschehen,

Oder prüfen Sie vor dem Update-Vorgang die entsprechenden Daten und melden Sie Fehler rechtzeitig, um zu verhindern, dass fehlerhafte Daten in das System gelangen.

4.2 Nachteile

①Das größte Problem bei Triggern ist die schlechte Lesbarkeit.

Da Trigger in der Datenbank gespeichert und ereignisgesteuert sind, bedeutet dies, dass Trigger möglicherweise nicht von der Anwendungsschicht gesteuert werden. Dies stellt eine große Herausforderung für die Systemwartung dar. Erstellen Sie beispielsweise einen Auslöser, um den Einzahlungsvorgang des Mitglieds zu ändern. Wenn bei der Operation im Trigger ein Problem auftritt, schlägt die Aktualisierung des gespeicherten Mitgliedswerts fehl. Ich benutze

Der folgende Code demonstriert dies:

mysql> aktualisiere demo.membermaster, setze memberdeposit=20, wobei memberid = 2;
FEHLER 1054 (42S22): Unbekannte Spalte „aa“ in „Feldliste“

Das Ergebnis zeigt, dass das System einen Fehler ausgibt und das Feld „aa“ nicht existiert. Dies liegt daran, dass der Dateneinfügevorgang im Trigger ein zusätzliches Feld hat und das System einen Fehler ausgibt. Wenn Sie diesen Auslöser jedoch nicht verstehen, denken Sie möglicherweise, dass ein Problem mit der Aktualisierungsanweisung selbst oder mit der Struktur der Mitgliedsinformationstabelle vorliegt. Vielleicht gibst du

Ich habe versucht, dieses Problem zu lösen, indem ich der Mitgliedsinformationstabelle ein Feld namens „aa“ hinzugefügt habe, aber das war reine Zeitverschwendung.

②Änderungen an zugehörigen Daten können Triggerfehler verursachen.

Insbesondere Änderungen in der Datentabellenstruktur können Triggerfehler verursachen und dadurch den normalen Ablauf von Datenoperationen beeinträchtigen. Diese beeinträchtigen die Effizienz der Fehlerbehebung bei den Fehlerursachen in der Anwendung aufgrund der verborgenen Natur der Auslöser selbst.

4.3 Hinweise

Beachten Sie: Wenn in der untergeordneten Tabelle eine Fremdschlüsseleinschränkung definiert ist und der Fremdschlüssel die Klausel ON UPDATE/DELETE CASCADE/SET NULL angibt, führt das Ändern des referenzierten Schlüsselwerts der übergeordneten Tabelle oder das Löschen der referenzierten Datensatzzeile der übergeordneten Tabelle auch zu Änderungs- und Löschvorgängen in der untergeordneten Tabelle.

Der durch die Anweisung definierte Trigger wird nicht aktiviert.

Dies ist das Ende dieses Artikels über die Verwendung und die Vor- und Nachteile von MySQL-Triggern. Weitere relevante MySQL-Trigger-Inhalte finden Sie in den vorherigen Artikeln von 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

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
  • 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

<<:  Vergleich von div und span in HTML_PowerNode Java Academy

>>:  Sehr detaillierte JavaScript-Implementierung eines Webseiten-Karussells

Artikel empfehlen

React verwendet Routing, um zur Anmeldeoberfläche umzuleiten

Im vorherigen Artikel haben wir nach der Konfigur...

Eine kurze Diskussion über 3 bemerkenswerte neue Features in TypeScript 3.7

Inhaltsverzeichnis Vorwort Optionale Verkettung N...

Testfragen und Referenzantworten zum Thema Webdesign und Produktion

<br />Test zu Webdesign und -produktion, Tei...

Javascript zum Wechseln von Bildern per Mausklick

In diesem Artikelbeispiel wird der spezifische Ja...

Wertschätzung des dezenten und eleganten Webdesigns in Schwarz, Weiß und Grau

Unter den klassischen Farbkombinationen kann wohl...

Docker-Installations- und Konfigurationsschritte für RabbitMQ

Inhaltsverzeichnis Bereitstellung auf einem einze...

Was ist HTML?

Geschichte der HTML-Entwicklung: HTML steht im En...

So verwenden Sie den Linux-Befehl „basename“

01. Befehlsübersicht Basisname - entfernt Verzeic...

Vue Shuttle-Box ermöglicht Auf- und Abbewegung

In diesem Artikelbeispiel wird der spezifische Co...

MySQL verwendet Variablen, um verschiedene Sortierungen zu implementieren

Kerncode -- Im Folgenden werde ich die Implementi...

Teilen Sie die 15 besten HTML/CSS-Design- und Entwicklungsframeworks

Professionelles Webdesign ist komplex und zeitint...