Detaillierte Erläuterung der gespeicherten Prozeduren, Cursor und Transaktionsbeispiele von MySQL Das Folgende ist eine gespeicherte Prozedur für MySQL-Datenbanken, die ich geschrieben habe. Ich behalte sie zur Archivierung und verwende sie in Zukunft als Referenz. Darunter sind gespeicherte Prozeduren, Cursor (Doppelschleifen) und Transaktionen. [Anmerkung]: Die Kommentare im Code beziehen sich nur auf das aktuelle Geschäft und können ignoriert werden. Der Code lautet wie folgt: TRENNUNGSZEICHEN $$ DROP-PROZEDUR, WENN `transferEmailTempData`$$ VORHANDEN IST ERSTELLEN SIE DAS VERFAHREN „transferEmailTempData“ (IN jobId VARCHAR (24)) BEGINNEN DECLARE idval VARCHAR(24) DEFAULT ''; DECLARE taskIdval VARCHAR(24) DEFAULT ''; DECLARE groupIdval VARCHAR(24) DEFAULT ''; DECLARE emailval VARCHAR(50) DEFAULT ''; /*Identifizieren Sie, ob die Daten in der formalen Tabelle identisch sind, d. h., ob die Gruppen-ID und die E-Mail-Adresse identisch sind*/ DECLARE infoId VARCHAR(24) DEFAULT ''; /*Transaktionsfehler*/ DECLARE err INT DEFAULT 0; /*Absenden, wenn eine bestimmte Zahl erreicht ist, Zähler*/ DECLARE zählt INT DEFAULT 0; /*Identifizieren Sie, ob ein Rollback durchgeführt wurde*/ DECLARE isrollback INT DEFAULT 0; /*Wenn der Cursor durchlaufen wird, wird er als Markierung verwendet, um zu bestimmen, ob alle Datensätze durchlaufen wurden*/ DECLARE fertig INTEGER DEFAULT 0; /*Daten der Aufgabe in die temporäre Tabelle holen*/ DECLARE cur CURSOR FÜR SELECT id, taskId, groupId, email FROM `t_email_data_temp` WHERE taskId=jobId; /*Abfrage, ob identische Datensätze basierend auf Gruppen-ID und E-Mail vorhanden sind*/ DECLARE cur2 CURSOR FOR SELECT id FROM `t_email_info` e, wobei e. `group_id` = groupIdval UND e. `email_address` = emailval ist; /* Es tritt ein Fehler auf, wird auf 1 gesetzt, Rollback solange eine Ausnahme auftritt*/ DECLARE CONTINUE HANDLER FÜR SQLEXCEPTION SET err=1; /*Deklarieren Sie, dass die Flag-Variable auf einen bestimmten Wert gesetzt wird, wenn der Cursor alle Datensätze durchläuft*/ DECLARE CONTINUE HANDLER FÜR NICHT GEFUNDEN SET fertig=1; /*Transaktion starten*/ TRANSAKTION STARTEN; /*Cursor öffnen*/ ÖFFNEN aktuell; /*Verwenden Sie LOOP zum Durchlaufen*/ out_loop:SCHLEIFE /*Weisen Sie der Variablen den dem jeweiligen Ergebnis entsprechenden Feldwert zu*/ FETCH aktuell INTO idval, taskIdval, groupIdval, emailval; WENN fertig = 1 DANN Verlassen Sie out_loop; ENDE, WENN; /*Öffne den zweiten Cursor*/ ÖFFNEN cur2; SET fertig = 0; Hole cur2 in infoId; /*Wenn die offizielle Tabelle nicht dieselbe Gruppen-ID und denselben E-Mail-Datensatz hat, fügen Sie sie der offiziellen Tabelle hinzu*/ WENN fertig = 1 DANN /*In die formale Tabelle einfügen*/ INSERT INTO `t_email_info` VALUES(idval,emailval,groupIdval,0,'',JETZT(),'admin',JETZT(),'admin'); /*Temporäre Daten löschen*/ LÖSCHEN AUS `t_email_data_temp`, WO id = idval; /*Zähler, alle 1000 Einträge übermitteln*/ SET Zählungen = Zählungen + 1; /*Ausnahme aufgetreten, Rollback*/ WENN err=1 DANN SETZEN Sie isrollback=1; ROLLBACK; ANDERS WENN Anzahl = 1000, DANN BEGEHEN; /*Nach Erreichen von 1000 Einsendungen den Zähler zurücksetzen*/ SETZE die Anzahl = 0; ENDE, WENN; ENDE, WENN; ANDERS /*Wenn der gleiche Datensatz bereits existiert, löschen Sie ihn*/ WENN fertig=0 DANN LÖSCHEN AUS `t_email_data_temp`, WO id = idval; ENDE, WENN; ENDE, WENN; Hole cur2 in infoId; SCHLIESSEN cur2; /*Kontrolliere die externe Schleife. Dieser Schritt darf nicht fehlen, sonst endet er nach nur einer Schleife*/ SET fertig=0; ENDE DER SCHLEIFE out_loop; SCHLIESSEN aktuell; /*Wenn kein Rollback-Ereignis aufgetreten ist, aktualisieren Sie den Aufgabenstatus*/ /*Wenn die Aufgabe zurückgesetzt wird und der Aufgabenstatus nicht aktualisiert wird, werden die verbleibenden nicht festgeschriebenen Daten bei der nächsten Ausführung der Aufgabe erneut zur formalen Tabelle hinzugefügt*/ WENN isrollback=0 DANN UPDATE `t_email_task` t SET t.`if_finish` = 1 WHERE t.`id`=jobId; ENDE, WENN; ENDE$$ TRENNUNGSZEICHEN ; Oben finden Sie eine Erklärung zu gespeicherten Prozeduren, Cursorn und Transaktionen in MySQL. Wenn Sie Fragen haben, hinterlassen Sie bitte eine Nachricht oder diskutieren Sie in der Community dieser Site. Vielen Dank fürs Lesen und ich hoffe, es kann Ihnen helfen. Vielen Dank für Ihre Unterstützung dieser Site! Das könnte Sie auch interessieren:
|
<<: Zusammenfassung der Lösungen für allgemeine Linux-Probleme
>>: Benutzerdefiniertes JavaScript-Plug-In zum Implementieren der Tab-Umschaltfunktion
Inhaltsverzeichnis 1. Allgemeine Schritte zur SQL...
Vorwort In diesem Artikel wird erklärt, wie Vue-K...
Die Datenbank fragt ab, welches Objekt welche Fel...
Docker-Installation 1. Anforderungen: Linux-Kerne...
Rechtsklickmenü deaktivieren <body oncontextme...
Das Projekt muss MySQL verwenden. Da ich es zuvor...
Um Installationszeit zu sparen, habe ich zum Star...
Streng geprüfte Attribute Das offizielle Dokument...
Hinweis: Sie müssen dem übergeordneten Container ...
Lassen Sie uns zunächst darüber sprechen, warum w...
Frage: Der häufig verwendete Befehl "ll"...
Dieser Artikel beschreibt anhand eines Beispiels ...
Docker ist ein Verwaltungstool, das Prozesse als ...
Wenn MySQL zig Millionen Daten abfragt, können di...
So lassen Sie eine Remoteverbindung in MySql zu U...