>  기사  >  데이터 베이스  >  MySQL 테이블의 행을 어떻게 탐색합니까?

MySQL 테이블의 행을 어떻게 탐색합니까?

Barbara Streisand
Barbara Streisand원래의
2024-11-13 14:37:02634검색

How do I Traverse Rows in MySQL Tables?

MySQL 테이블의 행 탐색

MySQL은 기본적으로 "A의 각 레코드에 대해"와 같은 행별 루핑 구문을 지원하지 않지만 반복하는 메커니즘을 제공합니다.

프로시저 사용

한 가지 접근 방식은 개별 행에 대해 작동하는 프로시저를 만드는 것입니다. 프로시저는 쿼리처럼 실행될 수 있는 사용자 정의 코드 블록입니다. 다음은 테이블 A의 행을 반복하는 MySQL 프로시저입니다.

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();

이 프로시저는 테이블 A의 행 수를 계산한 다음 각 행을 반복하여 해당 데이터를 테이블 B에 삽입합니다.

사용 커서

또 다른 기술은 테이블에서 행 단위로 데이터를 검색할 수 있는 커서를 사용하는 것입니다. 커서는 프로시저보다 행 순회에 대한 더 많은 제어를 제공하지만 더 장황할 수도 있습니다. 다음 MySQL 커서 예를 고려하십시오.

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();

여기서 테이블 A에 대한 커서가 생성되어 열립니다. WHILE 루프는 커서에서 행을 가져와서 처리할 행이 더 이상 없을 때까지 처리합니다.

위 내용은 MySQL 테이블의 행을 어떻게 탐색합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.