Detaillierte Erläuterung der MySQL-Cursor-Konzepte und -Verwendung

Detaillierte Erläuterung der MySQL-Cursor-Konzepte und -Verwendung

Dieser Artikel erläutert anhand von Beispielen das Konzept und die Verwendung von MySQL-Cursorn. Teilen Sie uns die Einzelheiten zu Ihrer Information mit:

1. Das Konzept des Cursors (Cursor)

Eine SQL-Anweisung entspricht N Ressourcen. Die Schnittstelle zum Abrufen von Ressourcen ist der Cursor. Dem Cursor folgend kann jeweils eine Zeile abgerufen werden. Wenn Sie Android entwickelt haben, sollten Sie wissen, dass es eine API namens Cursor gibt, die auch zum Lesen von SQLite-Datenbanken verwendet wird und dieser hier etwas ähnelt.

2. Schritte zur Verwendung des Cursors

(1) Erklärung

Deklarieren mit „declare“

Cursornamen Cursor für Select_Statement deklarieren

(2) Öffnen Sie den Cursor

Verwenden Sie „open“ zum Öffnen

Cursorname öffnen

(3) Wert vom Cursor abrufen

Verwenden von „fetch“ zum Abrufen von Werten

fetch cursor name into var1,var2[,...] -- Die abgerufene Zeile mehreren Variablen zuweisen

(4) Schließen Sie den Cursor

Mit „Close“ schließen Sie den Cursor

Schließen Cursorname

3. Erstellen Sie einen einfachen Cursor

Anforderung: Lesen Sie die erste Datenzeile aus der Produkttabelle

Daten der Warentabelle:

這里寫圖片描述

Hinweis: Ich habe hier die MySQL-Endkennung in $ geändert. Wenn Sie wissen möchten, wie Sie sie auf $ setzen, lesen Sie bitte den vorherigen Artikel: MySQL-Trigger.

Definition:

Prozedur p12() erstellen
beginnen
  /*Definieren Sie drei Variablen zum Speichern der Produkt-ID, des Produktnamens und des Produktbestands*/
  Deklarieren Sie row_gid int; 
  Deklarieren Sie Zeilenname varchar (20);
  Deklarieren Sie row_num int;
  Deklarieren Sie den Getgoods-Cursor, um gid, name, num aus goods auszuwählen. --Definieren Sie den Cursor „open getgoods“. --Öffnen Sie den Cursor, um „getgoods“ in row_gid, row_name, row_num abzurufen. --Holen Sie sich den Wert vom Cursor, wählen Sie row_name, row_num aus. --Anzeigevorgang „close getgoods“; --Cursor schließen, end$

Ausgabe:

這里寫圖片描述

4. Operationen mit mehreren Werten

Prozedur p13() erstellen
beginnen
  Deklarieren Sie row_gid int;
  Deklarieren Sie Zeilenname varchar (20);
  Deklarieren Sie row_num int;
  Deklarieren Sie den GetGoods-Cursor, um GID, Name und Nummer aus den Waren auszuwählen.  
  öffne getgoods;
  Holt GetGoods in Row_GID, Row_Name, Row_Num.
  Wählen Sie Zeilenname, Zeilennummer.
  Holt GetGoods in Row_GID, Row_Name, Row_Num.
  Wählen Sie Zeilenname, Zeilennummer.
  Holt GetGoods in Row_GID, Row_Name, Row_Num.
  Wählen Sie Zeilenname, Zeilennummer.
  Holt GetGoods in Row_GID, Row_Name, Row_Num.
  Wählen Sie Zeilenname, Zeilennummer.
  getgoods schließen;
Ende$

Ausgabe:

這里寫圖片描述

Hinweis: Wenn der Cursor das Ende erreicht, tritt ein Fehler auf, falls Sie mit dem Abrufen weiterer Werte fortfahren.

5. Der Cursor durchläuft alle Daten in der Tabelle

(1) Verwenden eines Zählers zum Schleifen

Prozedur p14() erstellen
beginnen 
  Deklarieren Sie cnt int als Standard 0;
  deklariere i als int default 0;
  Deklarieren Sie row_gid int;
  Deklarieren Sie Zeilenname varchar (20);
  Deklarieren Sie row_num int;
  Deklarieren Sie den GetGoods-Cursor, um GID, Name und Nummer aus den Waren auszuwählen.
  Wählen Sie count(*) in cnt aus Waren;
  öffne getgoods;
  wiederholen 
    Holt GetGoods in Row_GID, Row_Name, Row_Num.
  Wählen Sie Zeilenname, Zeilennummer.
  setze i:= i+1;
  bis i >= cnt, Ende, wiederholen;
  getgoods schließen;
Ende$

Ausgabe:

這里寫圖片描述

(2) Verwenden Sie das Out-of-Bounds-Flag, um die Schleife zu steuern

Im MySQL-Cursor können Sie declare continue handler deklarieren, um ein Out-of-Bounds-Flag zu betreiben

Grammatik:

Deklarieren Sie einen Continue-Handler für die NOT FOUND-Anweisung.

verwenden:

Prozedur p15() erstellen
beginnen
  Deklarieren Sie row_gid int;
  Deklarieren Sie Zeilenname varchar (20);
  Deklarieren Sie row_num int;
  Deklarieren Sie „int“ als Standardwert „1“.
  Deklarieren Sie den GetGoods-Cursor, um GID, Name und Nummer aus den Waren auszuwählen.
  Deklarieren Sie den Continue-Handler für den Satz NOT FOUND:= 0;
  öffne getgoods;
  wiederholen 
    Holt GetGoods in Row_GID, Row_Name, Row_Num.
  Wählen Sie Zeilenname, Zeilennummer.
  bis = 0, Ende, wiederholen;
  getgoods schließen;
Ende$

Ausgabe:

這里寫圖片描述

Hinweis: Hier ist ein Fehler aufgetreten. Es wurden vier Datenzeilen ausgegeben, aber in der Tabelle waren nur drei Datenzeilen. Außerdem wurde eine Warnung angezeigt. Wie Sie dieses Problem lösen können, erklären wir später.

Logik der Programmausführung:

Cursorschleife -> dritte Daten abrufen -> anzeigen -> vierte Daten abrufen -> keine Daten -> Operation „have=0“ festlegen -> Continue-Handler ausführen -> Programm wird nicht beendet, Anzeigeoperation ausführen -> trotzdem dritte Daten anzeigen

6. Der Unterschied zwischen „Continue“ und „Exit“

weiter: Wenn keine Daten zurückgegeben werden, wird das Programm fortgesetzt und die Variable IS_FOUND auf 0 gesetzt. Dies geschieht, wenn „select XX into XXX from tablename“ (XX in XXX aus Tabellennamen auswählen) wird.
Beenden: Wenn keine Daten zurückgegeben werden, beenden Sie das Programm und setzen Sie die Variable IS_FOUND auf 0. Dies geschieht, wenn Sie aus dem Tabellennamen XX in XXX auswählen.

Verwenden Sie „exit“, um „continue“ zu ersetzen:
Wenn Sie exit verwenden, tritt die obige Situation nicht ein. Die Programmausführungslogik lautet:

Cursorschleife -> dritte Daten abrufen -> anzeigen -> vierte Daten abrufen -> keine Daten -> have=0 setzen -> Programm wird direkt beendet

Daher werden die vierten Daten nicht angezeigt.

Prozedur p16() erstellen
beginnen
  Deklarieren Sie row_gid int;
  Deklarieren Sie Zeilenname varchar (20);
  Deklarieren Sie row_num int;
  Deklarieren Sie „int“ als Standardwert „1“.
  Deklarieren Sie den GetGoods-Cursor, um GID, Name und Nummer aus den Waren auszuwählen.
  Deklarieren Sie den Exit-Handler für NOT FOUND, und setzen Sie Folgendes ein: = 0;
  öffne getgoods;
  wiederholen 
    Holt GetGoods in Row_GID, Row_Name, Row_Num.
  Wählen Sie Zeilenname, Zeilennummer.
  bis = 0, Ende, wiederholen;
  getgoods schließen;
Ende$

Ausgabe:

這里寫圖片描述

7. Cursorschleife korrigieren

In einigen Sonderfällen können die gelesenen Daten leer sein oder es können Fehler in der SQL-Anweisung vorliegen. Diese Situation können wir nicht vermeiden, daher müssen wir Cursorschleifenoperationen korrekt verwenden.

Zuerst sollten Sie einen Cursor erstellen. Nachdem Sie den Cursor geöffnet haben, sollten Sie manuell eine Datenzeile abrufen. Verarbeiten Sie dann in einer Schleife zuerst den Inhalt und rufen Sie ihn dann ab. Auf diese Weise wird have = 0 ausgeführt, wenn während der manuellen Datenerfassungsphase keine Daten erfasst werden. Wenn es sich um eine Wiederholungsschleife handelt, wird die Wiederholungsschleife aufgerufen, zuerst werden Nulldaten ausgegeben und dann erneut erfasst. Auf diese Weise wird die Schleife beendet, wenn sie bis „until“ läuft. Wenn es sich um eine while-Schleife handelt, wird die while-Schleife überhaupt nicht aufgerufen und es erfolgt keine Ausgabe einer Zeile.

(1) Schleife wiederholen:

Prozedur p17() erstellen
beginnen
  Deklarieren Sie row_gid int;
  Deklarieren Sie Zeilenname varchar (20);
  Deklarieren Sie row_num int;
  Deklarieren Sie „int“ als Standardwert „1“.
  Deklarieren Sie den GetGoods-Cursor, um GID, Name und Nummer aus den Waren auszuwählen, wobei 0 ist.
  Deklarieren Sie den Continue-Handler für den Satz NOT FOUND:= 0;
  öffne getgoods;
  Holt GetGoods in Row_Gid, Row_Name, Row_Num.
  wiederholen 
  Wählen Sie Zeilenname, Zeilennummer.
    Holt GetGoods in Row_Gid, Row_Name, Row_Num.
  bis = 0, Ende, wiederholen;
  getgoods schließen;
Ende$

Ausgabe:

這里寫圖片描述

(2) While-Schleife:

Prozedur p18() erstellen
beginnen
  Deklarieren Sie row_gid int;
  Deklarieren Sie Zeilenname varchar (20);
  Deklarieren Sie row_num int;
  Deklarieren Sie „int“ als Standardwert „1“.
  Deklarieren Sie den GetGoods-Cursor, um GID, Name und Nummer aus den Waren auszuwählen, wobei 0 ist.
  Deklarieren Sie den Continue-Handler für den Satz NOT FOUND:= 0;
  öffne getgoods;
  Holt GetGoods in Row_Gid, Row_Name, Row_Num.
  während haben = 1 tun 
  Wählen Sie Zeilenname, Zeilennummer.
    Holt GetGoods in Row_Gid, Row_Name, Row_Num.
  Ende während;
  getgoods schließen;
Ende$

Ausgabe:

這里寫圖片描述

Leser, die an weiteren MySQL-bezogenen Inhalten interessiert sind, können sich die folgenden Themen auf dieser Site ansehen: „MySQL-Abfragekenntnisse“, „MySQL-Transaktionsoperationskenntnisse“, „MySQL-gespeicherte Prozedurkenntnisse“, „Zusammenfassung der Kenntnisse zu MySQL-Datenbanksperren“ und „Zusammenfassung der allgemeinen MySQL-Funktionen“.

Ich hoffe, dass dieser Artikel für jedermann beim Entwurf einer MySQL-Datenbank hilfreich ist.

Das könnte Sie auch interessieren:
  • Einführung in die Verwendung der Cursorschleife für gespeicherte Prozeduren in MySQL
  • Detaillierte Erläuterung der spezifischen Verwendung des MySQL-Cursors
  • Beispiel für die Verwendung des Cursors in einer gespeicherten MySQL-Prozedur
  • Einfaches Beispiel für einen SQLServer-Cursor
  • Erfahrung mit der Verwendung von MSSQL-Cursor
  • Beispiel für die Verwendung des SQL Server-Cursors (Cursor erstellen, Cursor schließen)
  • Bringen Sie Ihnen bei, wie Sie SQL-Cursor-Beispiele teilen
  • Grundlegende Anwendungsbeispiele für Cursor in SQL

<<:  Vue implementiert den Schnittstellen-Gleiteffekt

>>:  Eine kurze Analyse von Linux, um den Firewall-Status und den Status der für die Außenwelt geöffneten Ports zu überprüfen

Artikel empfehlen

So erstellen Sie eine MySQL-Datenbank (de1) mit Befehlen

1. Verbindung zu MySQL herstellen Format: mysql -...

Zusammenfassung gängiger Docker-Befehle

Docker-Installation 1. Anforderungen: Linux-Kerne...

Detaillierter Installationsprozess von MySQL5.6.40 unter CentOS7 64

MySQL5.6.40-Installationsprozess unter CentOS7 64...

Die umfassendsten 50 Mysql-Datenbankabfrageübungen

Diese Datenbankabfrageanweisung ist eine von 50 D...

So konfigurieren Sie ein Jupyter-Notebook im Docker-Container

Das Jupyter-Notebook wird unter dem Docker-Contai...

MySQL 8.0.11 Installations-Tutorial unter Windows

Dieser Artikel zeichnet das Installationstutorial...

Grafisches Tutorial zur Installation und Konfiguration von MySQL 8.0.22 winx64

Das grafische Tutorial zur Installation und Konfi...

Detaillierte Erklärung der CocosCreator-Optimierung DrawCall

Inhaltsverzeichnis Vorwort Was ist DrawCall Welch...

5 Dinge, die beim Schreiben von React-Komponenten mit Hooks zu beachten sind

Inhaltsverzeichnis 01. Verwenden Sie useState, we...

HTML+Sass implementiert HambergurMenu (Hamburger-Menü)

Vor ein paar Tagen habe ich mir ein Video von ein...

Lösung für den ES-Speicherüberlauf beim Starten von Docker

Fügen Sie die Datei jvm.options zur Elasticsearch...