Detaillierte Einführung zum MySQL-Cursor

Detaillierte Einführung zum MySQL-Cursor

1. Was ist ein Cursor?

Obwohl wir einen Datensatz auch über die Filterbedingungen WHERE und HAVING oder das Schlüsselwort LIMIT zurückgeben können, um die zurückgegebenen Datensätze einzuschränken, können wir einen Datensatz nicht wie einen Zeiger vorwärts oder rückwärts im Ergebnissatz lokalisieren oder隨意定位到某一條記錄und die Daten des Datensatzes verarbeiten.

Zu diesem Zeitpunkt können Sie den Cursor verwenden. Der Cursor bietet einen flexiblen Betriebsmodus, der es uns ermöglicht, jeden Datensatz im Ergebnissatz zu lokalisieren und die Daten im angezeigten Datensatz zu verarbeiten. Cursor geben SQL, einer satzorientierten Sprache, die Möglichkeit, Prozeduren zu entwickeln.

In SQL ist ein Cursor ein temporäres Datenbankobjekt, das auf eine in einer Datenbanktabelle gespeicherte Datenzeile zeigen kann. Hier充當了指針的作用. Wir können die Datenzeile bedienen, indem wir den Cursor bedienen MySQL中游標可以在存儲過程和函數中使用

Beispielsweise fragen wir die Mitarbeitertabelle ab, um herauszufinden, welche Mitarbeiter ein Gehalt über 15.000 haben:

SELECT Mitarbeiter-ID, Nachname, Gehalt FROM Mitarbeiter
WO Gehalt > 15000;

Bitte fügen Sie eine Beschreibung des Bildes hinzu

Hier können wir den Cursor verwenden, um die Datenzeilen zu bearbeiten. Wie in der Abbildung gezeigt, ist die Zeile, in der sich der Cursor befindet, der Datensatz „108“. Wir können den Cursor auch im Ergebnissatz scrollen, um auf eine beliebige Zeile im Ergebnissatz zu zeigen.

2. So verwenden Sie Cursor

Cursor müssen vor Handlern deklariert werden, und Variablen und Bedingungen müssen auch vor Cursorn oder Handlern deklariert werden.

1. Deklarieren Sie einen Cursor

Syntaxformat:

DECLARE Cursorname CURSOR FOR Abfrageanweisung;

Um den Datenergebnissatz abzurufen, verwenden Sie die SELECT-Anweisung. Zu diesem Zeitpunkt wurden die Daten jedoch noch nicht durchlaufen. Die Abfrageanweisung stellt hier die SELECT-Anweisung dar,返回一個用于創建游標的結果集

Beispiel:

DECLARE emp_cur CURSOR FÜR 
Wählen Sie Mitarbeiter-ID, Gehalt aus Mitarbeitern aus.

2. Öffnen Sie den Cursor

Syntaxformat:

ÖFFNEN Sie den Cursornamen;

Nachdem wir den Cursor definiert haben, müssen wir ihn zuerst öffnen, wenn wir ihn verwenden möchten. Wenn der Cursor geöffnet wird, wird der Abfrageergebnissatz der SELECT-Anweisung an den Cursorarbeitsbereich gesendet und darauf vorbereitet, dass der nachfolgende Cursor逐條讀取.

3. Verwenden Sie den Cursor

Syntaxformat:

FETCH Cursorname INTO Varname [, Varname] ...

Die Funktion dieser Anweisung besteht darin,游標名zu verwenden, um die aktuelle Zeile zu lesen, die Daten in der Variablen var_name zu speichern und den Cursor auf die nächste Zeile zu richten. Wenn die vom Cursor gelesene Datenzeile mehrere Spaltennamen hat, können Sie diese nach dem Schlüsselwort INTO mehreren Variablennamen zuweisen.

Hinweis: var_name muss vor der Deklaration des Cursors definiert werden.

Beispiel:

FETCH emp_cur INTO emp_id, emp_sal;

Hinweis: Die Anzahl der Felder im Ergebnissatz der Cursorabfrage muss mit der Anzahl der Variablen nach INTO übereinstimmen.

4. Schließen Sie den Cursor

Syntaxformat:

Cursorname schließen;

Wenn wir den Cursor nicht mehr brauchen, müssen wir ihn schließen. Da der Cursor占用系統資源, bleibt er, wenn er nicht rechtzeitig geschlossen wird, bis die gespeicherte Prozedur endet , bestehen, was die Effizienz des Systembetriebs beeinträchtigt. Durch das Schließen des Cursors werden die vom Cursor belegten Systemressourcen freigegeben.

Nach dem Schließen des Cursors können wir keine Datenzeilen mehr in den Abfrageergebnissen abrufen. Wenn wir sie abrufen müssen, können wir den Cursor nur erneut öffnen.

3. Codebeispiele

#Erstellen Sie eine gespeicherte Prozedur "get_count_by_limit_total_salary()",
#Deklarieren Sie den IN-Parameter limit_total_salary vom Typ DOUBLE; deklarieren Sie den OUT-Parameter total_count vom Typ INT.
#Die Funktion kann die Gehaltswerte der Mitarbeiter mit dem höchsten Gehalt addieren.
#Bis das Gesamtgehalt den Wert des Parameters limit_total_salary erreicht, geben Sie die kumulierte Anzahl der Personen an total_count zurück.

TRENNUNGSZEICHEN $
VERFAHREN ERSTELLEN get_count_by_limit_total_salary(IN limit_total_salary DOUBLE, OUT total_count INT)
BEGINNEN
	DECLARE count_emp INT DEFAULT 0; #Wird zum Aufzeichnen der Personenanzahl verwendet, der Standardwert ist 0
	DECLARE sum_sal DOUBLE DEFAULT 0; #Gesamtgehalt aufzeichnen DECLARE one_sal DOUBLE DEFAULT 0; #Gehalt einer Person aufzeichnen	
	#Deklarieren Sie einen Cursor, um das abgefragte Gehaltsergebnis von hoch nach niedrig zu sortieren. DECLARE emp_cur CURSOR FOR SELECT salary FROM employees ORDER BY salary DESC;
	
	OPEN emp_cur; #Öffne den Cursor	
	# Verwenden Sie Schleifenanweisungen, um zu durchlaufen, bis das Gesamtgehalt den Anforderungen der Frage entspricht. WIEDERHOLEN
		#Beginnen Sie mit der Verwendung des Cursors FETCH emp_cur INTO one_sal;
		
		SETze Summe_Salz = Summe_Salz + Eins_Salz;
		SET Anzahl_emp = Anzahl_emp + 1;
		
		BIS Gehaltssumme >= Gesamtgehaltsgrenze
		
	ENDE WIEDERHOLUNG;
	CLOSE emp_cur; #Cursor schließen	
	#Gibt das Ergebnis an total_count zurück
	Wählen Sie count_emp in total_count aus.
ENDE $
TRENNUNGSZEICHEN ;

Rufen Sie get_count_by_limit_total_salary(30000,@count) auf;
WÄHLEN SIE @count;

Denkanalyse: Erstellen Sie zuerst eine gespeicherte Prozedur und deklarieren Sie dann die Variablen, die Sie entsprechend der tatsächlichen Situation benötigen, um die Anforderungen der Frage zu erfüllen. Der Cursor sollte schrittweise erstellt werden: Öffnen Sie den Cursor, verwenden Sie den Cursor und schließen Sie schließlich den Cursor. Achten Sie darauf, den Cursor in einer Schleife zu verwenden, um die Einfachheit des Codes zu verbessern.

4. Zusammenfassung

Der Cursor ist eine wichtige Funktion von MySQL, die eine perfekte Lösung zum逐條讀取bietet. Im Vergleich zur Implementierung der gleichen Funktionalität auf Anwendungsebene können Cursor in gespeicherten Prozeduren verwendet werden, was effizienter ist und das Programm einfacher macht.

Dies bringt jedoch auch einige Leistungsprobleme mit sich. Wenn beispielsweise der Cursor verwendet wird, werden die Datenzeilen加鎖. Wenn die Geschäftsparallelität groß ist, beeinträchtigt dies nicht nur die Effizienz zwischen den Geschäftsbereichen, sondern消耗系統資源und führt zu unzureichendem Speicher. Dies liegt daran, dass der Cursor im Speicher verarbeitet wird.

Empfehlung: Machen Sie es sich zur Gewohnheit, Dinge nach dem Gebrauch zu schließen, um die Gesamteffizienz des Systems zu verbessern.

Liebe zum Schluss: Die Verwendung von Cursorn kombiniert die zuvor erlernten Wissenspunkte in Bezug auf gespeicherte Prozeduren, Prozesssteuerung und benutzerdefinierte Variablen. Es ist nicht schwierig, sich nur den Cursor-Wissenspunkt anzusehen. Sie sollten die zuvor erlernten Wissenspunkte überprüfen und ein gründliches Verständnis erreichen.

Dies ist das Ende dieses Artikels über die ausführliche Einführung des MySQL-Cursors. Weitere relevante MySQL-Cursor-Inhalte finden Sie in früheren Artikeln auf 123WORDPRESS.COM oder in den folgenden verwandten Artikeln. Ich hoffe, dass jeder 123WORDPRESS.COM in Zukunft unterstützen wird!

Das könnte Sie auch interessieren:
  • So verwenden Sie Cursor-Trigger in MySQL
  • MySQL-Cursorfunktionen und -Verwendung
  • Definition und Verwendung des MySQL-Cursors
  • So deklarieren Sie einen Cursor in MySQL

<<:  Beispiel für die Verwendung von Nginx zur Implementierung eines TCP-Proxys mit Portweiterleitung

>>:  Ein kurzer Vortrag über Responsive Design

Artikel empfehlen

Zusammenfassung von 28 gängigen JavaScript-String-Methoden und Verwendungstipps

Inhaltsverzeichnis Vorwort 1. Ermitteln Sie die L...

Zwei gängige Lösungen für den HTML-Textüberlauf zeigen Auslassungszeichen an

Methode 1: Verwenden Sie zur Lösung die CSS-Überl...

Native JS implementiert einen sehr gut aussehenden Zähler

Heute zeige ich Ihnen einen gut aussehenden Zähle...

Kurztipps für die Linux-Befehlszeile: So finden Sie eine Datei

Wir alle haben Dateien auf unseren Computern gesp...

Lösung zur Installation von Vim im Docker-Container

Inhaltsverzeichnis Der Anfang der Geschichte Inst...