Obwohl MySQL keine zeilenweise Schleifensyntax wie „für jeden Datensatz in A“ unterstützt, bietet es Mechanismen zum Iterieren systematisch durch Tabellenzeilen gehen.
Ein Ansatz besteht darin, eine Prozedur zu erstellen, die Arbeitet an einzelnen Zeilen. Prozeduren sind benutzerdefinierte Codeblöcke, die wie Abfragen ausgeführt werden können. Hier ist eine MySQL-Prozedur, die Zeilen in Tabelle A durchläuft:
DROP PROCEDURE IF EXISTS ROWPERROW; DELIMITER ;; CREATE PROCEDURE ROWPERROW() BEGIN DECLARE n INT DEFAULT 0; DECLARE i INT DEFAULT 0; SELECT COUNT(*) FROM A INTO n; SET i=0; WHILE i<n DO INSERT INTO B(ID, VAL) SELECT (ID, VAL) FROM A LIMIT i,1; SET i = i + 1; END WHILE; End; ;; DELIMITER ; CALL ROWPERROW();
Diese Prozedur zählt die Zeilen in Tabelle A, durchläuft dann jede Zeile und fügt ihre Daten in Tabelle B ein.
Eine andere Technik ist die Verwendung von Cursorn, mit denen Sie Daten Zeile für Zeile aus einer Tabelle abrufen können. Cursor bieten mehr Kontrolle über den Zeilendurchlauf als Prozeduren, können aber auch ausführlicher sein. Betrachten Sie das folgende MySQL-Cursor-Beispiel:
DROP PROCEDURE IF EXISTS cursor_ROWPERROW; DELIMITER ;; CREATE PROCEDURE cursor_ROWPERROW() BEGIN DECLARE done INT DEFAULT FALSE; DECLARE cursor_i CURSOR FOR SELECT ID,VAL FROM A; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN cursor_i; read_loop: LOOP FETCH cursor_i INTO cursor_ID, cursor_VAL; IF done THEN LEAVE read_loop; END IF; INSERT INTO B(ID, VAL) VALUES(cursor_ID, cursor_VAL); END LOOP; CLOSE cursor_i; END; ;; DELIMITER ; CALL cursor_ROWPERROW();
Hier wird ein Cursor für Tabelle A erstellt und geöffnet. Die WHILE-Schleife ruft Zeilen vom Cursor ab und verarbeitet sie, bis keine weiteren Zeilen mehr zu verarbeiten sind.
Das obige ist der detaillierte Inhalt vonWie durchlaufe ich Zeilen in MySQL-Tabellen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!