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
Nach chinesischem Brauch feiern wir das neue Jahr...
Inhaltsverzeichnis 1. Verstehen Sie die Grundlage...
Inhaltsverzeichnis 1. Definition des Stapels 2. J...
Überblick Ich glaube, dass wir häufig auf solche ...
Abfrage mehrerer Tabellen Verwenden Sie eine einz...
In diesem Artikelbeispiel wird der spezifische Co...
Inhaltsverzeichnis Optimierung der if-Beurteilung...
Vorwort Unter Windows können Sie mehrere MySQL-In...
So ändern Sie das MySQL-Tabellenpartitionierungsp...
Detaillierte Erklärung der Rolle statischer Varia...
Wenn Sie Informationen von Ihren Benutzern sammel...
Inhaltsverzeichnis Vor MySQL 5.6 Nach MySQL 5.6 Z...
Mithilfe von Traceroute können wir den Pfad ermit...
Dieser Artikel stellt hauptsächlich die Implement...
Inhaltsverzeichnis Ursache des Problems: Lösung: ...