다음을 통해 공유


커서란?

관계형 데이터베이스에서 연산은 전체 행 집합에 적용됩니다. SELECT 문에서 반환하는 행 집합은 문의 WHERE 절 조건을 충족하는 모든 행으로 구성됩니다. 문에서 반환하는 이 전체 행 집합을 결과 집합이라고 합니다. 애플리케이션, 특히 대화형 및 온라인 애플리케이션에서는 전체 결과 집합을 한 단위로 사용하므로 항상 효과적으로 작업할 수는 없습니다. 이 애플리케이션에는 한 번에 하나의 행 또는 작은 행 블록으로 작업하는 메커니즘이 필요합니다. 커서는 이러한 메커니즘을 제공하는 결과 집합의 확장 기능입니다.

커서는 커서 라이브러리에 의해 구현됩니다. 커서 라이브러리는 데이터 원본(결과 집합)에서 반환된 데이터의 특성을 관리하는 데 사용되는 데이터베이스 시스템 또는 데이터 액세스 API의 일부로 구현되는 소프트웨어입니다. 이러한 특성에는 동시성 관리, 결과 집합의 위치, 반환된 행 수, 결과 집합을 통해 앞으로 또는 뒤로 이동할 수 있는지(또는 둘 다) 이동할 수 있는지 여부(스크롤 가능성)가 포함됩니다.

커서는 결과 집합의 위치를 추적하고, 원래 테이블로 반환하거나 반환하지 않고도 결과 집합에 대해 행별로 여러 연산을 수행할 수 있습니다. 즉, 커서는 개념적으로 데이터베이스 내의 테이블을 기반으로 결과 집합을 반환합니다. 커서 이름은 컴퓨터 화면의 커서가 현재 위치를 나타내는 것처럼 결과 집합의 현재 위치를 나타내기 때문에 이름이 지정됩니다.

ADO에서 사용의 세부 사항을 알아보기 전에 커서의 개념에 익숙해지는 것이 중요합니다.

커서를 사용하여 다음을 수행할 수 있습니다.

  • 결과 집합의 특정 행에 위치를 지정합니다.

  • 현재 결과 집합 위치에 따라 한 행 또는 행 블록을 검색합니다.

  • 결과 집합의 현재 위치에 있는 행의 데이터를 수정합니다.

  • 다른 사용자가 변경한 데이터에 대한 다양한 수준의 민감도를 정의합니다.

예를 들어 잠재적인 구매자에게 사용 가능한 제품 목록을 표시하는 애플리케이션을 고려해 보세요. 구매자는 목록을 스크롤하여 제품 세부 정보 및 비용을 확인하고 마지막으로 구매할 제품을 선택합니다. 목록의 나머지 부분에 대해 추가 스크롤 및 선택 영역이 발생합니다. 구매자에 관한 한 제품은 한 번에 하나씩 표시되지만 애플리케이션은 스크롤 가능한 커서를 사용하여 결과 집합을 위아래로 탐색합니다.

다양한 방법으로 커서를 사용할 수 있습니다.

  • 행이 전혀 없는 상태에서.

  • 단일 테이블의 일부 또는 모든 행에 대해.

  • 논리적으로 조인된 테이블의 일부 또는 모든 행에 대해.

  • 커서 또는 필드 수준에서 읽기 전용이거나 업데이트 가능한 상태로.

  • 정방향 전용 또는 완전히 스크롤 가능한 상태로.

  • 서버에 위치한 커서 키 집합에 대해.

  • 다른 애플리케이션(예: 멤버 자격, 정렬, 삽입, 업데이트, 삭제)으로 인한 기본 테이블 변경에 민감합니다.

  • 서버 또는 클라이언트에 존재합니다.

읽기 전용 커서는 사용자가 결과 집합을 탐색하는 데 도움이 되며 읽기/쓰기 커서는 개별 행 업데이트를 구현할 수 있습니다. 기본 테이블 행을 다시 가리키는 키 집합을 사용하여 복잡한 커서를 정의할 수 있습니다. 일부 커서는 정방향으로 읽기 전용이지만 다른 커서는 앞뒤로 이동하고 다른 애플리케이션이 데이터베이스에 적용하는 변경 내용에 따라 결과 집합의 동적 새로 고침을 제공할 수 있습니다.

모든 애플리케이션이 데이터에 액세스하거나 업데이트하기 위해 커서를 사용할 필요는 없습니다. 일부 쿼리는 커서를 사용하여 직접 행을 업데이트할 필요가 없습니다. 커서는 데이터를 검색하도록 선택한 마지막 기술 중 하나여야 하며 가능한 가장 영향이 적은 커서를 선택해야 합니다. 저장 프로시저를 사용하여 결과 집합을 만들 때 커서 편집 또는 업데이트 메서드를 사용하여 결과 집합을 업데이트할 수 없습니다.

동시성

일부 다중 사용자 애플리케이션에서는 최종 사용자에게 표시되는 데이터가 가능한 한 최신 상태가 되는 것이 매우 중요합니다. 이러한 시스템의 전형적인 예는 많은 사용자가 지정된 항공편에서 동일한 좌석에 대해 경합할 수 있는(따라서 단일 레코드) 항공사 예약 시스템입니다. 이와 같은 경우 애플리케이션 디자인은 단일 레코드에서 동시 작업을 처리해야 합니다.

다른 애플리케이션에서는 동시성이 중요하지 않습니다. 이러한 경우 데이터를 항상 최신 상태로 유지하는 데 드는 비용은 정당화할 수 없습니다.

Position

또한 커서는 결과 집합의 현재 위치를 추적합니다. 배열 인덱스가 배열의 특정 위치에 있는 값을 가리키는 방식과 비슷하게 커서 위치를 현재 레코드에 대한 포인터로 간주합니다.

스크롤 가능 여부

애플리케이션에서 사용하는 커서 유형은 결과 집합의 행을 앞뒤로 이동하는 기능에도 영향을 줍니다. 이를 스크롤 가능성이라고도 합니다. 결과 집합에서 앞으로, 그리고 뒤로 이동하는 기능은 커서를 더 복잡하게 만드므로 구현하는 데 더 많은 비용이 듭니다. 이러한 이유로 필요한 경우에만 이 기능이 있는 커서를 요청해야 합니다.