Maison >base de données >tutoriel mysql >Comment parcourir les lignes dans les tables MySQL ?
Bien que MySQL ne prenne pas en charge nativement la syntaxe de boucle ligne par ligne comme "pour chaque enregistrement dans A", il fournit des mécanismes pour itérer à travers les lignes du tableau systématiquement.
Une approche consiste à créer une procédure qui opère sur des lignes individuelles. Les procédures sont des blocs de code définis par l'utilisateur qui peuvent être exécutés comme des requêtes. Voici une procédure MySQL qui parcourt les lignes du tableau A :
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();
Cette procédure compte les lignes du tableau A, puis parcourt chaque ligne et insère ses données dans le tableau B.
Une autre technique consiste à utiliser des curseurs, qui permettent de récupérer les données d'un tableau ligne par ligne. Les curseurs offrent plus de contrôle sur le parcours des lignes que les procédures, mais peuvent également être plus verbeux. Prenons l'exemple de curseur MySQL suivant :
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();
Ici, un curseur est créé pour la table A et ouvert. La boucle WHILE récupère les lignes du curseur et les traite jusqu'à ce qu'il n'y ait plus de lignes à traiter.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!