Heim  >  Artikel  >  Datenbank  >  MySQL erklärt in einfachen Worten, wie man Trigger verwendet

MySQL erklärt in einfachen Worten, wie man Trigger verwendet

WBOY
WBOYnach vorne
2022-09-01 14:41:312038Durchsuche

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.

Trigger-Übersicht

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.

Erstellung von Triggern

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.

Codebeispiel 1

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 2

Erstellen 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 anzeigen

INSERT INTO test_trigger (t_note) VALUES ('测试 AFTER INSERT 触发器');

Methode 2: Definition eines Triggers in der aktuellen Datenbank anzeigen

SELECT * FROM test_trigger_log

Methode 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

Vorteile von Triggern

1.

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

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

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.

Da Trigger in der Datenbank gespeichert und durch Ereignisse gesteuert werden, 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 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.

Zum Beispiel: Die DELETE-Anweisung basierend auf der Mitarbeitertabelle (t_employee) der untergeordneten Tabelle definiert den Trigger t1, und das Feld Abteilungsnummer (did) der untergeordneten Tabelle definiert eine Fremdschlüsseleinschränkung, die sich auf die Abteilungsnummer der Primärschlüsselspalte bezieht Die Abteilungstabelle der übergeordneten Tabelle (t_department) (did) und der Fremdschlüssel fügen die Klausel „ONDELETE SET NULL“ hinzu. Wenn die Abteilungstabelle der übergeordneten Tabelle (t_department) zu diesem Zeitpunkt gelöscht wird, wird die Mitarbeitertabelle der untergeordneten Tabelle (t_employee) gelöscht

Empfohlenes Lernen:

MySQL-Video-Tutorial

Das 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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:jb51.net. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen