Einführung und Verwendung von Triggern und Cursorn in MySQL

Einführung und Verwendung von Triggern und Cursorn in MySQL

Trigger-Einführung

Ein Trigger ist eine spezielle gespeicherte Prozedur, die mit einer Tabelle verknüpft ist und ausgelöst und ausgeführt werden kann, wenn Daten in eine Tabelle eingefügt, gelöscht oder geändert werden. Trigger verfügen über ausgefeiltere und komplexere Datensteuerungsfunktionen als die Standardfunktionen der Datenbank selbst.

Vorteile von Triggern:

  • Sicherheit: Benutzern können basierend auf den Werten der Datenbank bestimmte Rechte zum Bedienen der Datenbank eingeräumt werden. Beispielsweise ist es nicht gestattet, Datenbankdaten nach Feierabend und an Feiertagen zu ändern.
  • Auditing: kann Benutzeroperationen in der Datenbank verfolgen;
  • Implementieren Sie komplexe Datenintegritätsregeln. Ein Trigger kann beispielsweise jeden Versuch zurücknehmen, Futures zu kaufen, die die eigene Marge überschreiten.
  • Bietet eine alternative Möglichkeit zum Ausführen geplanter Aufgaben. Wenn beispielsweise die Mittel auf dem Konto des Unternehmens weniger als 50.000 Yuan betragen, werden sofort Warndaten an das Finanzpersonal gesendet.

Verwenden von Triggern in MySQL

Erstellen eines Triggers

Der Trick beim Erstellen von Triggern besteht darin, sich die vier Elemente eines Triggers zu merken:

  • Überwachungsort: Tisch;
  • Überwachungsereignisse: Einfügen/Aktualisieren/Löschen;
  • Auslösezeitpunkt: nach/vor;
  • Auslösende Ereignisse: Einfügen/Aktualisieren/Löschen.

Die grundlegende Syntax zum Erstellen eines Triggers lautet wie folgt:

TRIGGER ERSTELLEN
-- trigger_name: der Name des Auslösers; 
-- tirgger_time: Auslösezeit, VORHER oder NACHHER;
-- trigger_event: Auslöseereignis, das INSERT, DELETE oder UPDATE sein kann; 
 Triggername Triggerzeit Triggerereignis 
 AN
 -- tb_name: gibt den Namen der Tabelle an, in der der Trigger erstellt wird, und in welcher Tabelle der Trigger erstellt wird;
 tb_name
 -- FOR EACH ROW bedeutet, dass jede Operation an einem Datensatz, die das Triggerereignis erfüllt, den Trigger auslöst.
 FÜR JEDE REIHE
 -- trigger_stmt: Der Hauptteil des Triggers, der aus einer einzelnen SQL-Anweisung oder mehreren Anweisungen bestehen kann, die von BEGIN und END umschlossen sind. 
 Auslöser_stmt
  • trigger_name: der Name des Auslösers;
  • tirgger_time: Auslösezeit, entweder VORHER oder NACHHER;
  • trigger_event: Auslöseereignis, das INSERT, DELETE oder UPDATE sein kann;
  • tb_name: gibt den Namen der Tabelle an, in der der Trigger erstellt wird, und in welcher Tabelle der Trigger erstellt wird;
  • trigger_stmt: Der Hauptteil des Triggers, der aus einer einzelnen SQL-Anweisung oder mehreren Anweisungen bestehen kann, die von BEGIN und END umschlossen sind.
  • FOR EACH ROW bedeutet, dass jede Operation an einem Datensatz, die das Triggerereignis erfüllt, den Trigger auslöst.

Hinweis: Für das gleiche Trigger-Ereignis mit der gleichen Trigger-Zeit in der gleichen Tabelle kann nur ein Trigger definiert werden.

Neue und alte Rekorde auslösen

NEW und OLD werden in MySQL definiert, um die Datenzeile anzugeben, die den Trigger in der Tabelle ausgelöst hat, in der sich der Trigger befindet:

  • In einem INSERT-Trigger wird NEW verwendet, um neue Daten anzuzeigen, die eingefügt werden sollen (BEFORE) oder bereits eingefügt wurden (AFTER).
  • In einem UPDATE-Trigger wird OLD verwendet, um die ursprünglichen Daten anzuzeigen, die geändert werden sollen oder wurden, und NEW wird verwendet, um die neuen Daten anzuzeigen, die geändert werden sollen oder wurden.
  • In einem DELETE-Trigger wird OLD verwendet, um anzuzeigen, dass die Originaldaten gelöscht werden oder bereits gelöscht wurden.

Erstellen Sie einen Trigger, um den entsprechenden Produktbestandsdatensatz zu aktualisieren, wenn ein Benutzer ein Produkt kauft. Der Code lautet wie folgt:

-- Trigger löschen, Trigger löschen, Triggername – falls vorhanden, wird er nur gelöscht, wenn er existiert. Trigger löschen, falls vorhanden, myty1;
-- Einen Trigger erstellen. Trigger erstellen mytg1 – der Name des myty1-Triggers nach dem Einfügen bei Bestellungen – Bestellungen, für welche Tabelle der Trigger erstellt werden soll;
für jede Zeile
beginnen
	Produktsatz aktualisieren, Num = Num-New.Num, wobei Pid = New.Pid;
Ende;
--Datensätze in die Auftragstabelle einfügen, in Aufträge einfügen, Werte (null, 2,1);
-- Fragen Sie den Bestandsaktualisierungsstatus des Produkts in der Produkttabelle ab. Wählen Sie * aus dem Produkt aus.

Erstellen Sie einen Trigger, um den entsprechenden Produktbestandsdatensatz zu aktualisieren, wenn der Benutzer eine Bestellung löscht. Der Code lautet wie folgt:

-- Trigger erstellen Trigger erstellen mytg2
nach dem Löschen bei Bestellungen
für jede REIHE
beginnen 
-- Setzen Sie das Inventar zurück und fügen Sie das Update-Produktset num = num+old.num, wobei pid=old.pid, erneut hinzu.
Ende;
- Auftragsdatensätze löschen, löschen aus Aufträgen, bei denen oid = 2;
-- Fragen Sie den Bestandsaktualisierungsstatus des Produkts in der Produkttabelle ab. Wählen Sie * aus dem Produkt aus.

Der Unterschied zwischen vorher und nachher

vor Vor der Ausführung einer Anweisung nach Nach der Ausführung einer Anweisung

Wenn die Bestellmenge den Lagerbestand überschreitet, ändern Sie die Bestellmenge auf den maximalen Lagerbestand:

-- -- Erstelle einen Trigger vor dem Erstellen eines Triggers mytg3
vor dem Einfügen in Bestellungen
für jede Zeile 
beginnen 
	-- Definieren Sie eine Variable zum Empfangen der Bestandsdeklaration n int default 0;
	-- Inventar abfragen und num bis n zuweisen
	Wähle Num in N aus dem Produkt, wobei PID = neue.PID ist;
	-- Bestimmen Sie, ob die Bestellmenge größer als der Lagerbestand ist, wenn new.num>n dann
		-- Größer als der Lagerbestand bei Änderung der Bestellung (Lagerbestand auf Maximalmenge geändert)
	setze neue.num = n;
	Ende wenn;
	Produktsatz aktualisieren, Num = Num-New.Num, wobei Pid = New.Pid;
Ende;
--Datensätze in die Auftragstabelle einfügen, in Aufträge einfügen, Werte (null, 3,50);
-- Fragen Sie den Bestandsaktualisierungsstatus des Produkts in der Produkttabelle ab. Wählen Sie * aus dem Produkt aus.
-- Abfrage der Auftragstabelle select * from orders;

Cursor

Einführung in Cursor

Die Funktion des Cursors besteht darin, die durch Abfragen der Datenbank zurückgegebenen Datensätze zu durchlaufen, um entsprechende Vorgänge auszuführen. Der Cursor hat folgende Eigenschaften:

  • Der Cursor ist schreibgeschützt, das heißt, er kann nicht aktualisiert werden.
  • Der Cursor kann nicht gescrollt werden, d. h. er kann nur in eine Richtung bewegt werden, er kann sich nicht beliebig zwischen Datensätzen vor- und zurückbewegen und kann bestimmte Datensätze nicht überspringen.
  • Vermeiden Sie die Aktualisierung von Daten in einer Tabelle mit einem offenen Cursor.

Erstellen eines Cursors

Die Syntax zum Erstellen eines Cursors besteht aus vier Teilen:

  • Definieren Sie einen Cursor: Deklarieren Sie den Cursornamen Cursor für die Select-Anweisung;
  • Öffnen Sie den Cursor: Öffnen Sie den Cursornamen.
  • Ergebnisse abrufen: Cursornamen in Variablennamen abrufen [, Variablenname];
  • Cursor schließen: Name des Cursors schließen;

Erstellen Sie eine Prozedur p1, die einen Cursor verwendet, um die ersten Studenteninformationen in der Studententabelle in der Testdatenbank zurückzugeben. Der Code sieht folgendermaßen aus:

-- Prozedur definieren, Prozedur p1() erstellen
beginnen 
	Deklariere ID int;
	Deklarationsname varchar (20);
	Alter deklarieren int;
	- Cursor definieren, Cursornamen Cursor für Select-Anweisung deklarieren;
	Deklarieren Sie den MC-Cursor für „Select * from Student“;
	-- Öffnen Sie den Cursor, öffnen Sie den Cursornamen.
	offene MC;
	-- Datenabruf-Cursorname in Variablenname [, Variablenname] übernehmen;
	Hol' mc in ID, Name, Alter;
	- Ausgewählte ID, Name, Alter drucken;
	-- Schließen Sie den Cursor close mc;
Ende;
-- Rufe die Prozedur call p1() auf;

Erstellen Sie eine Student2-Tabelle in der Testdatenbank, erstellen Sie eine Prozedur p2, verwenden Sie einen Cursor, um alle Studenteninformationen aus der Student-Tabelle zu extrahieren und sie in die Student2-Tabelle einzufügen. Der Code sieht folgendermaßen aus:

-- Prozedur definieren, Prozedur p3() erstellen
beginnen 
	Deklariere ID int;
	Deklarationsname varchar (20);
	Alter deklarieren int;
	Deklarieren Sie die Flagge als Int-Standard 0.
	- Cursor definieren, Cursornamen Cursor für Select-Anweisung deklarieren;
	Deklarieren Sie den MC-Cursor für „Select * from Student“;
	Deklarieren Sie den Weiter-Handler für nicht gefundene Flags mit dem Wert 1;
	-- Öffnen Sie den Cursor, öffnen Sie den Cursornamen.
	offene MC;
	-- Datenabruf-Cursorname in Variablenname [, Variablenname] übernehmen;
	a:Schleife – Schleife zum Abrufen von Daten, mc in ID, Name, Alter;
	if flag=1 then -- triggert den Continue-Handler, wenn der Abruf fehlschlägt
	verlassen a;-- beenden Sie die Schleife Ende, wenn;
	-- Jede Zeile der extrahierten Daten durchlaufen und in die Tabelle „Student2“ einfügen, „insert into student2 values(id,name,age);“
	Endschleife;
	-- Schließen Sie den Cursor close mc;
Ende;
-- Prozeduraufruf p3() aufrufen;
-- Abfrage der Tabelle „student2“ select * from student2;

Zusammenfassen

Dies ist das Ende dieses Artikels über Trigger und Cursor in MySQL. Weitere relevante MySQL-Trigger und -Cursor 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:
  • MySQL-Serie fünf Ansichten, gespeicherte Funktionen, gespeicherte Prozeduren, Trigger
  • Verwendung von MySQL-Triggern
  • Detaillierte Erklärung des MySQL-Triggerbeispiels
  • Verwendung und Verständnis von MySQL-Triggern
  • Ein Artikel, der Ihnen ein tiefes Verständnis von Mysql-Triggern vermittelt

<<:  JavaScript-Canvas zum Erstellen eines Rubbellos-Beispiels

>>:  Zusammenfassung der CSS-Schwebeelementanalyse

Artikel empfehlen

Anwendungsbeispiele für React Hooks

Inhaltsverzeichnis Ein einfaches Komponentenbeisp...

Die umfassendsten 50 Mysql-Datenbankabfrageübungen

Diese Datenbankabfrageanweisung ist eine von 50 D...

Implementierungsbeispiel zum Hochladen mehrerer Anhänge in Vue

Inhaltsverzeichnis Vorwort Kerncode Datei zeigt e...

Untersuchung des Wertes des Positionsattributs in CSS (Zusammenfassung)

Das CSS-Positionsattribut gibt den Positionierung...

Der Prozess der Installation von SVN auf Ubuntu 16.04.5LTS

Dieser Artikel stellt kurz den Prozess der Einric...

Der gesamte Prozess der Konfiguration von Hive-Metadaten für MySQL

Gehen Sie im Hive-Installationsverzeichnis in das...

Vue3 Vue CLI-Konfiguration für mehrere Umgebungen

Inhaltsverzeichnis 1. Einleitung 2. Umschalten 1....

So verhindern Sie Event-Bubbling in JavaScript

Wir müssen darauf achten, dass die Eigenschaften ...

Vergleich mehrerer Beispiele zur Einfügungseffizienz in MySQL

Vorwort Aus beruflichen Gründen musste ich kürzli...

6 Möglichkeiten zur eleganten Handhabung von Objekten in JavaScript

Inhaltsverzeichnis Vorwort 1. Objekt.freeze() 2. ...

Zusammenfassung gängiger Befehle zur Linux-Benutzer- und Gruppenverwaltung

Dieser Artikel fasst die allgemeinen Befehle zur ...