Heim  >  Artikel  >  Datenbank  >  Einfaches Tutorial zum erweiterten MySQL-Cursor (3).

Einfaches Tutorial zum erweiterten MySQL-Cursor (3).

黄舟
黄舟Original
2017-02-09 15:13:01901Durchsuche

MySQL Cursor Simple Tutorial

Ab MySQL V5.5 wurde eine große Änderung vorgenommen, nämlich die Verwendung von InnoDB als Standardspeicher-Engine. InnoDB unterstützt Transaktionen und verfügt über zugehörige RDBMS-Funktionen: ACID-Transaktionsunterstützung, Datenintegrität (unterstützt Fremdschlüssel), Disaster-Recovery-Funktionen usw.

Fassen Sie nun kurz das Wissen über Cursor zusammen.

(1) Den Cursor verstehen

Ein Cursor ist einfach der abgefragte Datenindex. Durch die Bedienung des Cursors (erste Position, letzte Position, vorherige Position, Die nächste Position) kann durchlaufen werden aus den Daten.

Einer der Hauptgründe für die Verwendung eines Cursors besteht darin, Erfassungsvorgänge in die Verarbeitung einzelner Datensätze umzuwandeln. Nach dem Abrufen von Daten aus der Datenbank mithilfe der SQL-Sprache wird das Ergebnis in einem Speicherbereich abgelegt, und das Ergebnis ist häufig eine Sammlung mit mehreren Datensätzen. Der Cursor-Mechanismus ermöglicht es Benutzern, zeilenweise auf diese Datensätze im SQL-Server zuzugreifen und diese Datensätze nach den eigenen Wünschen anzuzeigen und zu bearbeiten.

In der Datenbank ist der Cursor ein sehr wichtiges Konzept. Cursor bieten ein flexibles Mittel zum Bearbeiten von aus einer Tabelle abgerufenen Daten. Im Wesentlichen sind Cursor ein Mechanismus, der jeweils einen Datensatz aus einer Ergebnismenge extrahieren kann, die mehrere Datensätze enthält. Ein Cursor ist immer einer SQL-SELECT-Anweisung zugeordnet, da ein Cursor aus einer Ergebnismenge (die aus null, einem oder mehreren Datensätzen bestehen kann, die von der zugehörigen SELECT-Anweisung abgerufen werden können) und einer Cursorposition in der Ergebnismenge besteht, die auf einen bestimmten Datensatz zeigt . Wenn Sie sich entscheiden, eine Ergebnismenge zu verarbeiten, müssen Sie einen Cursor deklarieren, der auf die Ergebnismenge zeigt. Wenn Sie jemals ein Programm geschrieben haben, das Dateien in der Sprache C verarbeitet, ist der Cursor wie das Dateihandle, das Sie erhalten, wenn Sie eine Datei öffnen. Solange die Datei erfolgreich geöffnet wird, kann das Dateihandle die Datei darstellen. Für Cursor ist die Logik dieselbe. Es ist ersichtlich, dass der Cursor die Ergebnismenge aus der Basistabelle auf ähnliche Weise verarbeiten kann wie ein herkömmliches Programm, das eine Flatfile liest, wodurch die Daten in der Tabelle dem Programm in Form einer Flatfile präsentiert werden.

Wir wissen, dass relationale Datenbankverwaltungssysteme im Wesentlichen satzorientiert sind. In MS SQL SERVER gibt es keinen Ausdruck zur Beschreibung eines einzelnen Datensatzes in einer Tabelle, es sei denn, eine WHERE-Klausel wird verwendet, um nur einen Datensatz zu begrenzen ausgewählt. Daher müssen wir Cursor verwenden, um die Datenverarbeitung für einzelne Datensätze durchzuführen. Es ist ersichtlich, dass der Cursor es der Anwendung ermöglicht, dieselben oder unterschiedliche Vorgänge für jede Zeile in der von der Abfrageanweisung „select“ zurückgegebenen Zeilenergebnismenge auszuführen, anstatt dieselbe Operation für die gesamte Ergebnismenge auf einmal auszuführen Fähigkeit, den gleichen Vorgang an den Daten in der Tabelle basierend auf der Cursorposition durchzuführen. Darüber hinaus ist es der Cursor, der das sammlungsorientierte Datenbankverwaltungssystem und die zeilenorientierte Programmierung verbindet und die beiden Daten ermöglicht Verarbeitungsmethoden zur Kommunikation.

Wenn es sich bei den von Ihnen abgerufenen Daten während des Datenbankentwicklungsprozesses nur um einen Datensatz handelt, verwendet der von Ihnen geschriebene Transaktionsanweisungscode häufig die SELECT INSERT-Anweisung. Wir stoßen jedoch häufig auf Situationen, in denen wir Datensätze einzeln aus einer bestimmten Ergebnismenge lesen. Wie kann man dieses Problem lösen? Cursor bieten uns eine äußerst hervorragende Lösung – das heißt, die Verwendung von Cursorn

ist eine lesbare Kennung, um zu identifizieren, wo die Daten abgerufen wurden.

(2) Cursoreigenschaften

1, schreibgeschützt

2, nicht scrollend

3, unempfindlich

(3 ) Verwenden von Cursorn

Es sollte betont werden, dass der Cursor definiert werden muss, bevor der Handler definiert wird, aber die Variable muss definiert werden, bevor der Cursor definiert wird. Die Reihenfolge ist Variablendefinition – Cursordefinition – Handler.

1. Definieren Sie einen Cursor

DECLARE cursor_name CURSOR FOR select_statement

Diese Anweisung deklariert einen Cursor. In einem Unterprogramm können auch mehrere Cursor definiert werden. Jeder Cursor in einem Block muss eindeutig benannt werden. Nach der Deklaration des Cursors handelt es sich ebenfalls um eine einzelne Operation.

2. Cursor OPEN

OPEN cursor_name

Diese Anweisung öffnet einen zuvor deklarierten Cursor.

3. Cursor FETCH

FETCH cursor_name INTO var_name [, var_name] ...

Diese Anweisung liest die nächste Zeile (sofern es eine nächste Zeile gibt) mit dem angegebenen offenen Cursor und geht weiter der Cursorzeiger auf diese Zeile.

4. 游标CLOSE

CLOSE cursor_name

这个语句关闭先前打开的游标,注意,用完后必须关闭。

(四)示例

下面是一个存储过程,里面用到游标,逐条更新数据(批量更新数据)

BEGIN
 DECLARE  no_more_record INT DEFAULT 0;
 DECLARE  pID BIGINT(20);
 DECLARE  pValue DECIMAL(15,5);
 DECLARE  cur_record CURSOR FOR   SELECT colA, colB from tableABC;  /*首先这里对游标进行定义*/
 DECLARE  CONTINUE HANDLER FOR NOT FOUND  SET  no_more_record = 1; /*这个是个条件处理,针对NOT FOUND的条件,当没有记录时赋值为1*/
 
 
 OPEN  cur_record; /*接着使用OPEN打开游标*/
 FETCH  cur_record INTO pID, pValue; /*把第一行数据写入变量中,游标也随之指向了记录的第一行*/
 
 
 WHILE no_more_record != 1 DO
 INSERT  INTO testTable(ID, Value)
 VALUES  (pID, pValue);
 FETCH  cur_record INTO pID, pValue;
 
 END WHILE;
 CLOSE  cur_record;  /*用完后记得用CLOSE把资源释放掉*/
END

以上就是 mysql进阶(三)游标简易教程的内容,更多相关内容请关注PHP中文网(www.php.cn)!


Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn