컴퓨터 과학/데이터 베이스

MySQL 커서는 어디서 사용할 수 있을까?

Data Jun 2025. 8. 23. 14:01

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이 잘 처리해주지만,
각 행마다 다른 로직을 적용해야 할 때는 스토어드 프로그램 안에서 커서를 활용하면 됩니다.