Empfohlenes Lernen: MySQL-Video-Tutorial
In der tatsächlichen Entwicklung stoßen wir häufig auf eine solche Situation: Es gibt zwei oder mehr miteinander verbundene Tabellen, z. B. werden Produktinformationen und Bestandsinformationen in 2 gespeichert. In verschiedenen Datentabellen, Wenn wir einen neuen Produktdatensatz hinzufügen, müssen wir zur Gewährleistung der Datenintegrität auch einen Inventardatensatz zur Inventartabelle hinzufügen. Auf diese Weise müssen wir diese beiden zugehörigen Operationsschritte in das Programm schreiben und sie mit Transaktionen umschließen, um sicherzustellen, dass diese beiden Operationen zu atomaren Operationen werden, entweder alle oder keine davon.
Wenn Sie auf besondere Umstände stoßen, müssen Sie die Daten möglicherweise manuell pflegen, sodass es leicht passieren kann, dass ein Schritt vergessen wird, was zu Datenverlust führt. Zu diesem Zeitpunkt können wir Trigger verwenden. Sie können einen Auslöser erstellen, sodass das Einfügen von Produktinformationsdaten automatisch das Einfügen von Bestandsdaten auslöst. Auf diese Weise müssen Sie sich keine Sorgen über fehlende Daten machen, weil Sie vergessen haben, Bestandsdaten hinzuzufügen.
MySQL unterstützt Trigger ab Version 5.0.2. MySQL-Trigger sind wie gespeicherte Prozeduren Programme, die in den MySQL-Server eingebettet sind. Ein Trigger ist ein Vorgang, der durch ein Ereignis ausgelöst wird, einschließlich INSERT-, UPDATE- und DELETE-Ereignissen.
Das sogenannte Event bezeichnet die Aktion des Nutzers bzw. das Auslösen eines bestimmten Verhaltens. Wenn ein Triggerprogramm 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 Einfüge-, Aktualisierungs- und Löschvorgänge für Daten in einer Datentabelle ausgeführt werden und eine Datenbanklogik automatisch ausgeführt werden muss, können Trigger verwendet werden, um dies zu erreichen.
Trigger-Syntax erstellen
CREATE TRIGGER 触发器名称 {BEFORE|AFTER} {INSERT|UPDATE|DELETE} ON 表名 FOR EACH ROW 触发器执行的语句块;
Beschreibung:
Tabellenname: Stellt das vom Trigger überwachte Objekt dar.
VOR |. NACHHER: Gibt die Auslösezeit an. BEFORE bedeutet Trigger vor dem Ereignis; AFTER bedeutet Trigger nach dem Ereignis.
INSERT |. UPDATE |. Zeigt ausgelöste Ereignisse an.
INSERT bedeutet Auslösen, wenn ein Datensatz eingefügt wird;
UPDATE bedeutet Auslösen, wenn ein Datensatz aktualisiert wird;
DELETE bedeutet Auslösen, wenn ein Datensatz gelöscht wird.
Erstellen Sie zwei Tabellen.
CREATE TABLE test_trigge r ( id INT PRIMARY KEY AUTO_INCREMENT , t_note VARCHAR ( 30 ) ) ; CREATE TABLE test_trigger_log ( id INT PRIMARY KEY AUTO_INCREMENT , t_log VARCHAR ( 30 ) ) ;
Erstellen Sie einen Trigger
Codebeispiel 2Erstellen Sie einen Trigger
DELIMITER / / CREATE TRIGGER befo_re_insert BEFORE INSERT ON test_trigger FOR EACH ROW BEGIN INSERT INTO test_trigger_log ( t_log ) VALUES ( ' befo re_inse rt ' ) ; END / / DELIMITER ;
Fügen Sie Daten in die Datentabelle test_trigger ein.
INSERT INTO test_trigger (t_note) VALUES ('测试 BEFORE INSERT 触发器');
Sehen Sie sich die Daten in der test_trigger_log-Datentabelle an
SELECT * FROM test_trigger_log
Codebeispiel 3
Definieren Sie den Trigger „salary_check_trigger“ basierend auf dem INSERT-Ereignis der Mitarbeitertabelle „employees“. Überprüfen Sie vor dem INSERT, ob das Gehalt des Der hinzuzufügende neue Mitarbeiter ist größer als Wenn das Gehalt seines Vorgesetzten höher ist als das Gehalt des Vorgesetzten, wird ein Fehler gemeldet, dass sqlstate_value „HY000“ ist, was dazu führt, dass das Hinzufügen fehlschlägt.
DELIMITER / / CREATE TRIGGER after_insert AFTER INSERT ON test_trigger FOR EACH ROW BEGIN INSERT INTO test_trigger_log ( t_log ) VALUES ( ' after_insert ' ) ; END / / DELIMITER ;
Das Schlüsselwort NEW im obigen Trigger-Deklarationsprozess stellt den neuen Datensatz der INSERT-Anweisung dar.
Löschtrigger anzeigen
Methode 1: Definition aller Trigger in der aktuellen Datenbank anzeigenINSERT INTO test_trigger (t_note) VALUES ('测试 AFTER INSERT 触发器');
SELECT * FROM test_trigger_logMethode 3: Aus der TRIGGERS-Tabelle der Systembibliothek information_schema Fragen Sie die Informationen des Triggers „salary_check_trigger“ ab.
DELIMITER // CREATE TRIGGER salary_check_trigger BEFORE INSERT ON employees FOR EACH ROW BEGIN DECLARE mgrsalary DOUBLE; SELECT salary INTO mgrsalary FROM employees WHERE employee_id = NEW.manager_id; IF NEW.salary > mgrsalary THEN SIGNAL SQLSTATE 'HY000' SET MESSAGE_TEXT = '薪资高于领导薪资错误'; END IF; END // DELIMITER ;Trigger löschen
SHOW TRIGGERS
Die Menge, der Kaufpreis und der Kaufbetrag stimmen nicht mit der Gesamtmenge und dem Gesamtbetrag in den Bestelldetails überein. Dies ist eine Dateninkonsistenz.
Um dieses Problem zu lösen, können wir Trigger verwenden, um festzulegen, dass bei jedem Einfügen, Ändern und Löschen von Daten in der Tabelle mit den Bestelldetails
automatisch der zweistufige Vorgang ausgelöst wird:
1) Neu berechnen Bestelldetailstabelle Die Gesamtmenge und der Gesamtbetrag in der Bestelltabelle
2) Verwenden Sie den im ersten Schritt berechneten Wert, um die Gesamtmenge und den Gesamtbetrag in der Bestelltabelle zu aktualisieren.
Auf diese Weise stimmen die Gesamtmenge und der Gesamtbetrag in der Bestelltabelle immer mit der in der Bestelldetailtabelle berechneten Gesamtmenge und
Gesamtmenge überein. Die Daten sind konsistent und stehen nicht im Widerspruch zueinander anderer. Widerspruch.
2. Auslöser können uns bei der Aufzeichnung von Betriebsprotokollen helfen.
Mithilfe von Triggern können Sie gezielt erfassen, was zu welchem Zeitpunkt passiert ist. Ein sehr gutes Beispiel ist beispielsweise das Aufzeichnen des Auslösers für die Änderung des gespeicherten Wertbetrags des Mitglieds. Dies ist für uns sehr hilfreich, um das spezifische Szenario bei der Durchführung des Vorgangs wiederherzustellen und die Ursache des Problems besser zu lokalisieren.
3. Trigger können auch verwendet werden, um die Gültigkeit von Daten vor dem Betrieb zu überprüfen.
Wenn beispielsweise ein Supermarkt Waren einkauft, muss der Lagerleiter den Einkaufspreis eingeben. Bei der Eingabe der Menge kann es jedoch leicht passieren, dass Sie beim Eingeben des Betrags den Barcode scannen, die Seriennummer lesen und der eingegebene Preis den Verkaufspreis bei weitem übersteigt Verlust in den Büchern. .....
Diese können alle durch Auslöser vor dem eigentlichen Einfüge- oder Aktualisierungsvorgang überprüft werden, um rechtzeitig Fehler zu melden, um zu verhindern, dass
fehlerhafte Daten in das System gelangen.
Nachteile von Triggern
1 Eines der größten Probleme von Triggern ist die schlechte Lesbarkeit.
Erstellen Sie beispielsweise einen Auslöser, um die Aufladevorgänge für Mitglieder zu ändern. Wenn bei der Operation im Trigger ein Problem auftritt, schlägt die Aktualisierung des gespeicherten Wertbetrags des Mitglieds fehl. Ich verwende den folgenden Code zur Demonstration
Das Ergebnis zeigt, dass das System einen Fehler auslöst und das Feld „aa“ nicht vorhanden ist.Das liegt daran, dass der Dateneinfügungsvorgang 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 Update-Anweisung selbst oder mit der Struktur der Mitgliedsinformationstabelle vorliegt. Möglicherweise fügen Sie der Mitgliedsinformationstabelle auch ein Feld mit dem Namen „aa“ hinzu, um dieses Problem zu lösen, aber das Ergebnis ist vergeblich.
2. Änderungen der zugehörigen Daten können zu Triggerfehlern führen.
Besonders Änderungen in der Datentabellenstruktur können zu Triggerfehlern führen und somit den normalen Betrieb von Datenoperationen beeinträchtigen. Diese beeinträchtigen die Effizienz der Fehlerbehebung in Anwendungen, da der Auslöser selbst verborgen ist.
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, wird der von der übergeordneten Tabelle referenzierte Schlüsselwert geändert oder die übergeordnete Tabelle gelöscht Wenn auf die referenzierte Datensatzzeile verwiesen wird, führt dies auch zu Änderungs- und Löschvorgängen in der Untertabelle. Zu diesem Zeitpunkt werden die auf der Grundlage der UPDATE- und DELETE-Anweisungen der Untertabelle definierten Trigger nicht aktiviert.
Empfohlenes Lernen:
MySQL-Video-TutorialDas obige ist der detaillierte Inhalt vonMySQL erklärt in einfachen Worten, wie man Trigger verwendet. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!