MySQL에서 커서(Cursor)는 데이터베이스 질의 결과를 순회하고 조작하기 위한 개체입니다.
커서를 사용하면 쿼리 결과 집합을 하나씩 가져와서 처리할 수 있으며, 데이터베이스 로직을 더욱 유연하게 작성할 수 있습니다.
다음은 MySQL 커서에 대한 자세한 설명과 예시입니다:
1. 커서의 개념:
- 커서는 결과 집합에 대한 포인터 또는 인덱스로 볼 수 있습니다.
커서를 사용하여 결과 집합을 순회하고 특정 레코드를 선택하고 조작할 수 있습니다.
2. 커서의 사용 단계:
- 커서를 사용하는 과정은 다음과 같습니다:
1) 커서를 선언합니다.
2) 커서에 결과 집합을 연결합니다.
3) 커서를 열고 결과 집합을 가져옵니다.
4) 커서를 사용하여 결과 집합을 순회하고 조작합니다.
5) 커서를 닫고 자원을 해제합니다.
3. 커서의 종류:
- MySQL에서는 선언적 커서(DECLARE CURSOR)와 핸들러 커서(HANDLER) 두 가지 종류의 커서를 지원합니다.
선언적 커서는 결과 집합 전체를 가져오고, 핸들러 커서는 결과 집합을 순회하면서 한 번에 하나의 레코드를 처리합니다.
4. 예시:
- 다음은 주문 테이블에서 특정 고객의 주문 목록을 조회하는 커서를 사용하는 예시입니다:
DELIMITER //
CREATE PROCEDURE GetCustomerOrders(IN customerId INT)
BEGIN
DECLARE orderId INT;
DECLARE orderDate DATE;
-- 커서 선언
DECLARE curOrders CURSOR FOR
SELECT id, order_date FROM orders WHERE customer_id = customerId;
-- 커서에 결과 집합 연결
DECLARE CONTINUE HANDLER FOR NOT FOUND SET @finished = TRUE;
-- 커서 열기
OPEN curOrders;
-- 커서 사용하여 결과 집합 순회
read_loop: LOOP
-- 결과 집합에서 레코드 가져오기
FETCH curOrders INTO orderId, orderDate;
-- 더 이상 결과가 없으면 반복문 종료
IF @finished THEN
LEAVE read_loop;
END IF;
-- 가져온 레코드 사용하여 작업 수행
-- 예시: 주문 정보 출력
SELECT CONCAT('Order ID:', orderId, ', Order Date:', orderDate);
END LOOP read_loop;
-- 커서 닫기
CLOSE curOrders;
END //
DELIMITER ;
위의 예시에서는 `GetCustomerOrders`라는 스토어드 프로시저를 생성합니다.
이 프로시저는 `customerId`라는 입력 파라미터를 받아 해당 고객의 주문 목록을 조회하는 커서를 사용합니다.
커서는 `curOrders`라는 이름으로 선언되며, `orders` 테이블에서 고객 ID에 해당하는 주문 ID와 주문 날짜를 가져옵니다.
결과 집합을 순회하면서 각 주문 정보를 출력합니다.
커서를 사용하면 데이터베이스 결과 집합을 효율적으로 처리할 수 있습니다.
커서를 사용하면 특정 레코드를 선택하거나 조작하는 등의 작업을 수행할 수 있으며, 데이터베이스 로직을 더욱 유연하게 작성할 수 있습니다.
'SQL > MYSQL' 카테고리의 다른 글
[MYSQL] 웹 사이트 개발 환경 구축에 대해 (0) | 2023.06.27 |
---|---|
[MYSQL] 파티션 (0) | 2023.06.27 |
[MYSQL] 전체 텍스트 검색 방법 (0) | 2023.06.19 |
[MYSQL] 트리거 사용 방법 (0) | 2023.06.15 |
[MYSQL] 스토어드 함수 사용 방법 (0) | 2023.06.15 |
[MYSQL] 스토어드 프로시저 사용 방법 (0) | 2023.06.15 |
[MYSQL] 인덱스가 필요한 경우와 필요 없는 경우 (0) | 2023.06.15 |
[MYSQL] 인덱스의 성능 비교하기 (0) | 2023.06.15 |