27.3 서버 측 커서 제한
서버 측 커서는 mysql_stmt_attr_set()
함수를 사용하여 C API로 구현됩니다. 스토어드 루틴의 커서도 같은 구현이 사용됩니다. 서버 쪽 커서는 서버 측에서 결과 세트를 생성 할 수 있지만 클라이언트가 요구하는 행을 제외하고 클라이언트에 전송 할 수 없습니다. 예를 들어, 클라이언트가 쿼리를 실행하지만, 첫 번째 행만 필요한 경우 나머지 행은 전송되지 않습니다.
MySQL은 서버 측 커서는 내부 임시 테이블에 구체화됩니다. 처음 이것은 MEMORY
테이블이지만, 그 크기가 max_heap_table_size
및 tmp_table_size
시스템 변수의 최소값을 초과하면 MyISAM
테이블로 변환됩니다. 커서의 결과 세트를 유지하기 위해 만든 내부 임시 테이블은 내부 임시 테이블을 외에 사용하는 것과 같은 제한 사항이 적용됩니다. 섹션 8.4.4 "MySQL이 내부 임시 테이블을 사용하는 방법" 을 참조하십시오. 이 구현의 제한 중 하나는 큰 결과 세트의 경우, 커서에 의한 행의 검색에 시간이 걸릴 수 있다는 것입니다.
커서는 읽기 전용입니다. 커서를 사용하여 행을 업데이트 할 수 없습니다.
UPDATE WHERE CURRENT OF
및 DELETE WHERE CURRENT OF
업데이트 가능한 커서가 지원되지 않기 때문에 구현되지 않습니다.
커서는 유지 불가능합니다 (커밋 후 열려 수 없습니다).
커서는 비 민감한입니다.
커서는 스크롤 불가능합니다.
커서는 이름이 없습니다. 문 핸들러가 커서 ID로 작동합니다.
준비된 명령문마다 커서를 하나만 열어 둘 수 있습니다. 여러 커서가 필요한 경우 여러 문을 준비해야합니다.
결과 세트를 생성하는 문에서 준비 모드에서 지원되지 않는 것에는 커서를 사용할 수 없습니다. 이러한 문은 CHECK TABLE
, HANDLER READ
, SHOW BINLOG EVENTS
등이 있습니다.