Maison >base de données >tutoriel mysql >Comment parcourir les lignes dans les tables MySQL ?

Comment parcourir les lignes dans les tables MySQL ?

Barbara Streisand
Barbara Streisandoriginal
2024-11-13 14:37:02760parcourir

How do I Traverse Rows in MySQL Tables?

Parcours des 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.

Utilisation de procédures

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.

Utilisation Curseurs

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!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn