MySQL-Trigger-Verwendungsszenarien und Methodenbeispiele

MySQL-Trigger-Verwendungsszenarien und Methodenbeispiele

auslösen:

Trigger-Verwendungsszenarien und entsprechende Versionen:

Der Trigger kann mit folgenden MySQL-Versionen verwendet werden:

  • Version: MySQL5 oder höher

Beispielhafte Anwendungsszenarien:

  1. Wenn ein Kunde zu einer Datenbanktabelle hinzugefügt wird, überprüfen Sie, ob die Telefonnummer das richtige Format hat und die Abkürzung des Staates groß geschrieben ist.
  2. Bei jeder Bestellung eines Produktes wird die bestellte Menge von der Lagermenge abgezogen.
  3. Wenn eine Zeile gelöscht wird, wird eine Kopie in einer Archivtabelle aufbewahrt.

Das heißt: Wird automatisch verarbeitet, wenn eine Tabelle geändert wird.

Wenn der Triggerfehler „Es ist nicht zulässig, einen Ergebnissatz von einem Trigger zurückzugeben“ auftritt, scrollen Sie für weitere Details bitte bis zum Ende.

Verwendung von Triggern:

Erstellen Sie einen einfachen Auslöser:

Erstellen Sie einen Trigger für neues Produkt nach dem Einfügen für Produkte für jede Zeile.
BEGINNEN
 DECLARE msg VARCHAR(100);
 SET msg = "Produkte hinzugefügt";
 SIGNAL SQLSTATE 'HY000' SET Nachrichtentext = Nachricht;
 
ENDE

Ergebnis:

INSERT INTO Produkte VALUES('demo2','1003','xiaoguo','66.6','Hallo Welt')
> 1644 - Produkte hinzugefügt
> Zeit: 0,035 s

erklären:

Erstellen Sie zuerst einen Trigger:

#newproduct Der Name des Triggers CREATE TRIGGER newproduct

Auslösezeitpunkt:

VORHER: Trigger werden vor der Anweisung ausgelöst, die sie ausgelöst hat.

NACHHER: Trigger werden ausgelöst, nachdem die Anweisung, die sie ausgelöst hat, abgeschlossen ist.

Hier verwenden wir „after“, d. h. die Auslösebedingung tritt ein, nachdem die Einfügung abgeschlossen ist.

DECLARE msg VARCHAR(100);

Hinweis: Die „declare“-Anweisung ist eine Anweisung zum Deklarieren von Variablen in einer zusammengesetzten Anweisung. Wenn „msg“ nicht deklariert ist, meldet MySQL beim Ausführen der Anweisung einen Fehler.

SIGNAL SQLSTATE 'HY000' SET Nachrichtentext = Nachricht;

Wenn die SIGNAL-Anweisung einen bestimmten SQLSTATE-Wert angibt, wird dieser Wert verwendet, um die angegebene Bedingung darzustellen.

„HY000“ wird als „allgemeiner Fehler“ bezeichnet:

Tritt im Kommando ein allgemeiner Fehler auf, wird die Meldung in der Folgemeldung ausgelöst;

Hinweis: Diese Aussage spiegelt nur mein persönliches Verständnis wider und ich habe nur ein begrenztes Verständnis davon. Wenn Sie eine bessere Erklärung haben, hinterlassen Sie bitte eine Nachricht.

Die Auslösebedingung beginnt mit BEGIN und endet mit END.

Auslösendes Ereignis:

  1. einfügen
  2. aktualisieren
  3. löschen

So löschen Sie einen Trigger:

- Löschen Sie den Auslöser DROP TRIGGER newproduct;

INSERT-Trigger:

Der Insert-Trigger wird vor oder nach der Ausführung der Insert-Anweisung ausgeführt. Dabei sind folgende Punkte zu beachten:

  1. Darin befindet sich der Einfüge-Triggercode. Sie können auf eine virtuelle Tabelle mit dem Namen NEW verweisen, um auf die eingefügte Zeile zuzugreifen.
  2. In einem Trigger vor dem Einfügen kann der Wert in NEW auch aktualisiert werden (wodurch der eingefügte Wert geändert werden kann).
  3. Bei AUTO_INCREMENT-Spalten enthält NEW vor der Ausführung des Einfügens 0 und nach der Ausführung des Einfügens den neuen automatisch generierten Wert.

Beispiel: Beim Einfügen einer neuen Bestellung eine neue Bestellnummer generieren und unter order_num speichern

CREATE TRIGGER neworder AFTER INSERT ON Aufträge für JEDE REIHE
 Wählen Sie NEW.order_num in @ee;

einfügen INTO orders(order_date,cust_id) VALUES(NOW(),10001);
WÄHLEN Sie @ee als Nummer;

TRIGGER-Neuauftrag löschen;

erklären:

Erstellen Sie einen Neworder-Trigger, der nach dem Einfügen und für jede eingefügte Zeile ausgeführt wird. Beim Einfügen gibt es eine virtuelle Tabelle, die genau mit der durch NEW dargestellten Orders-Tabelle identisch ist.

Wählen Sie NEW.order_num in @a;

Suchen Sie die Anzahl der Daten, die wir in die virtuelle Tabelle eingefügt haben, und speichern Sie die Nummer in der Variablen „a“.

Erkennung:

einfügen INTO orders(order_date,cust_id) VALUES(NOW(),10001);
WÄHLEN Sie @ee als Nummer;

Daten einfügen und die Nummer der eingefügten Daten ausgeben

löschen:

TRIGGER-Neuauftrag löschen;

Löschen Sie den Auslöser.

Beispiel 2:

Erstellen Sie einen Trigger für die Tabelle COURSE, um beim Einfügen zu prüfen, ob Datensätze mit demselben Kursnamen vorhanden sind. Wenn dies der Fall ist, wird keine Aktion ausgeführt.

TRIGGER ERSTELLEN trg_course_in 
VOR EINFÜGEN AUF Kurs
FÜR JEDE REIHE
BEGINNEN
  DECLARE msg VARCHAR(100); 
  WENN EXISTIERT (SELECT * FROM natürlich wo cname=NEW.cname) DANN 
   SET msg = 'Ein Kurs mit demselben Namen kann nicht eingegeben werden'; 
   SIGNAL SQLSTATE 'HY000' SET Nachrichtentext = Nachricht; 
  ENDE, WENN; 
 
ENDE

Beispiel 3: Achten Sie beim Einfügen von Informationen in die Studententabelle darauf, dass der Wert von ssex „männlich“ oder „weiblich“ sein muss.

Erstellen Sie den Trigger trg_ssex nach dem Einfügen für den Studenten für jede Zeile
BEGINNEN
 DECLARE msg VARCHAR(100);
 WENN(NEW.ssex nicht in('男','女')) DANN
 SET msg = „Das Geschlecht muss männlich oder weiblich sein“; 
 SIGNAL SQLSTATE 'HY000' SET Nachrichtentext = Nachricht;
 ENDE, WENN
ENDE

UPDATE-Trigger:

  1. Im Code des Aktualisierungsauslösers können Sie auf eine virtuelle Tabelle mit dem Namen OLD verweisen, um auf den vorherigen Wert zuzugreifen, d. h. den Wert vor der Ausführung der Aktualisierung. Sie können auch auf eine virtuelle Tabelle mit dem Namen NEW verweisen, um auf den neu aktualisierten Wert zuzugreifen.
  2. In einem Trigger vor dem Update kann der Wert in NEW auch aktualisiert werden (wodurch eine Änderung des in der Update-Anweisung zu verwendenden Werts möglich ist).
  3. Alle Werte in OLD sind schreibgeschützt und können nicht aktualisiert werden.

Beispiel 1: Stellen Sie sicher, dass die Abkürzung des Staates groß geschrieben wird

Erstellen Sie einen Trigger für Update-Anbieter vor dem Update für Anbieter.
FÜR JEDE ZEILE SET new.vend_state =UPPER(new.vend_state);

UPDATE-Anbieter SET vend_state='hw', wobei vend_id='1001';
DROP TRIGGER UPDATE-Anbieter;

Hinweis: upper: wandelt den Text in Großbuchstaben um:

Beispiel 2: Es ist nicht zulässig, die Studenten-ID SNO in der Studententabelle zu ändern. Wenn diese Spalte geändert wird, wird eine Fehlermeldung angezeigt und der Vorgang wird abgebrochen.

TRIGGER trg_student_updateSno VOR DEM UPDATE ERSTELLEN
FÜR JEDE REIHE
BEGINNEN
 DECLARE msg VARCHAR (100); 
 WENN NEU.sno <> ALT.sno DANN 
 SET msg = „Die Änderung von sno ist nicht zulässig“; 
 SIGNAL SQLSTATE 'HY000' SET Nachrichtentext = Nachricht; 
 ENDE, WENN; 
ENDE

DELETE-Trigger:

Ein DELETE-Trigger wird vor oder nach der Ausführung der Delete-Anweisung ausgeführt:

  1. Im Löschauslösercode können Sie auf die virtuelle Tabelle von OLD verweisen, um auf die gelöschte Zeile zuzugreifen.
  2. Alle Werte in OLD sind schreibgeschützt und können nicht aktualisiert werden

Beispiel:

Verwenden Sie „old“, um die zu löschenden Zeilen in einer Archivtabelle zu speichern.

Erstellen Sie zunächst eine Tabelle ähnlich den Bestellungen:

Tabelle „Archive_Bestellungen“ erstellen wie Bestellungen;
-- Erstellen Sie einen Löschtrigger CREATE TRIGGER deleteorder BEFORE DELETE für Bestellungen
für JEDE REIHE BEGIN
INSERT INTO archive_orders(Bestellnummer,Bestelldatum,Kunden-ID) VALUES(alte.Bestellnummer,altes.Bestelldatum,alte.Kunden-ID);
ENDE

erklären:

Wenn Sie Informationen in einer Zeile der Auftragstabelle löschen, speichern Sie die gelöschten Informationen in archive_orders.

Löschen Sie eine Zeile aus der Originaltabelle:

LÖSCHEN AUS Bestellungen, WO Bestellnummer = '20014';

Sehen Sie die Wirkung:

AUSWÄHLEN * AUS Archivbestellungen;

Beenden:

Hinweis: Wenn Sie auf einen Triggerfehler stoßen: „Es ist nicht zulässig, einen Ergebnissatz von einem Trigger zurückzugeben“

  1. Grund: Seit MySQL 5 werden Trigger zum Zurückgeben von Ergebnismengen nicht mehr unterstützt.
  2. Lösung: Fügen Sie in den Variablennamen @ nach der folgenden Anweisung ein
  3. Daten abrufen: @Variablenname auswählen

Ausführliche Erklärung: https://www.programmersought.com/article/3237975256/

Benutzervariablen erstellen: https://www.jb51.net/article/201843.htm

Damit ist dieser Artikel über die Verwendungsszenarien und -methoden von MySQL-Triggern abgeschlossen. Weitere Informationen zur Verwendung von MySQL-Triggern finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, Sie werden 123WORDPRESS.COM auch in Zukunft unterstützen!

Das könnte Sie auch interessieren:
  • Detaillierte Erklärung des MySQL-Triggerbeispiels
  • Einführung und Verwendung von Triggern und Cursorn in MySQL
  • Verwendung und Verständnis von MySQL-Triggern
  • So verwenden Sie Cursor-Trigger in MySQL
  • Der Einsatz von MySQL Triggern und worauf zu achten ist
  • Detaillierte Erklärung der MySQL-Datenbank-Trigger
  • Eine kurze Diskussion über MySql-Ansichten, Trigger und gespeicherte Prozeduren
  • Beispiele für die Erstellung und Verwendung von MySQL-Triggern
  • Detaillierte Erklärung der grundlegenden Verwendung von MySQL-Triggern [Erstellen, Anzeigen, Löschen usw.]
  • Verwendung von MySQL-Triggern

<<:  HTML ist eigentlich die Anwendung zum Erlernen mehrerer wichtiger Tags

>>:  Docker führt einen Befehl in einem Container außerhalb des Containers aus

Artikel empfehlen

Detaillierte Erläuterung der MySQL-Datenbankisolationsebene und des MVCC

Inhaltsverzeichnis 1. Isolationsstufe LESEN SIE U...

Was ist TypeScript?

Inhaltsverzeichnis 1. JavaScript-Probleme 2. Vort...

Detaillierte Anwendungsfälle von Vue3 Teleport

Offizielle Website https://cli.vuejs.org/en/guide...

Detaillierte Erklärung von count(), group by, order by in MySQL

Ich bin vor Kurzem auf ein Problem gestoßen, als ...

So erstellen Sie eine Ansicht in MySQL

Grundlegende Syntax Sie können eine Ansicht mit d...

Lernen Sie die schwarze Technologie der Union-All-Verwendung in MySQL 5.7 in 5 Minuten

Leistung von „Union All“ in MySQL 5.6 Teil 1: MyS...

MySQL-Protokolleinstellungen und Anzeigemethoden

MySQL verfügt über die folgenden Protokolle: Fehl...

Analyse der grundlegenden Verwendung von ul und li

Navigation, kleine Datenmenge Tabelle, zentriert &...

Vue+el-table realisiert das Zusammenführen von Zellen

In diesem Artikelbeispiel wird der spezifische Co...

In WMP eingebettetes HTML, kompatibel mit Chrome und IE, detaillierte Einführung

Tatsächlich gibt es viele entsprechende Schreibme...

Tutorial zur Installation von PHP auf CentOS über Yum

Lassen Sie mich zunächst vorstellen, wie Sie PHP ...

Lösung für „Ubuntu kann keine Verbindung zum Netzwerk herstellen“

Effektive Lösung für Ubuntu, wenn in einer virtue...