SQL을 배우다 보면 **커서(Cursor)**라는 개념이 등장합니다.
커서는 쿼리 결과 집합을 한 행씩 순차적으로 처리할 수 있는 기능인데,
그렇다면 이 커서를 MySQL에서는 어디서 쓸 수 있을까요?
커서를 사용할 수 있는 곳
MySQL에서는 커서를 스토어드 프로그램(Stored Program) 내부에서만 사용할 수 있습니다.
- ✅ 스토어드 프로시저 (Stored Procedure)
- ✅ 스토어드 함수 (Stored Function)
- ✅ 트리거 (Trigger)
- ✅ 이벤트 (Event Scheduler)
즉, BEGIN ... END 블록으로 감싸지는 절차적 SQL 문맥 안에서만 커서를 선언·사용할 수 있습니다.
커서를 사용할 수 없는 곳
- ❌ 일반 SELECT, UPDATE, DELETE 같은 단순 SQL 문장 안에서는 불가
- ❌ Workbench 콘솔에서 그냥 DECLARE CURSOR만 실행하는 것도 불가
예를 들어 아래 구문은 오류가 발생합니다:
DECLARE cur CURSOR FOR SELECT * FROM usertbl; -- 🚫 에러
왜 그럴까?
- 일반 SQL은 이미 집합 단위 연산을 기본으로 제공하기 때문에 커서가 필요 없습니다.
- 커서는 **절차적 제어(Procedural Control)**가 필요한 상황에서만 의미가 있습니다.
- 예: 각 행마다 다른 계산, 로그 기록, 다른 테이블에 조건부 삽입 등
정리
- 커서는 스토어드 프로그램 안에서만 사용할 수 있다.
- 즉, 프로시저/함수/트리거/이벤트와 함께 사용 가능.
- 일반 SQL에서는 필요 없고, 사용할 수도 없다.
👉 한마디로, 커서는 **“절차적 SQL 안에서만 동작하는 행 단위 처리 도구”**라고 기억하면 됩니다.
결론:
단순 집합 연산(SELECT AVG(...), SUM(...))은 SQL이 잘 처리해주지만,
각 행마다 다른 로직을 적용해야 할 때는 스토어드 프로그램 안에서 커서를 활용하면 됩니다.
'컴퓨터 과학 > 데이터 베이스' 카테고리의 다른 글
| MySQL 중첩 트리거와 롤백 동작 (0) | 2025.08.23 |
|---|---|
| MySQL 중첩 트리거(Nested Trigger) 예제: 주문 → 재고 차감 → 배송 등록 자동화 (0) | 2025.08.23 |
| MySQL 커서(Cursor) 이해하기: 고객 키 평균 구하기 예제 (0) | 2025.08.23 |
| MySQL 스토어드 프로시저 vs 스토어드 함수 (0) | 2025.08.23 |
| MySQL 사용자 정의 함수 (Stored Function) 예제: 나이 계산 함수 만들기 (0) | 2025.08.23 |