共用方式為


什麼是游標?

關係資料庫中的作業會處理一組完整的數據列。 SELECT 語句所傳回的數據列集包含滿足 語句 WHERE 子句中條件的所有數據列。 語句所傳回的這個完整數據列集稱為結果集。 應用程式,特別是互動式和在線的應用程式,不一定能有效地使用整個結果集作為一個單位。 這些應用程式需要一個機制,一次處理一個數據列或一個小數據列區塊。 游標是結果集的延伸,用來提供該機制。

游標是由游標函式庫實作。 游標庫是一種軟體,通常作為資料庫系統或資料存取 API 的一部分,用來管理從資料來源返回的資料屬性(結果集)。 這些屬性包括並行管理、結果集中的位置、傳回的數據列數目,以及您是否可以向前或向後移動(或兩者)透過結果集(卷動性)。

游標會追蹤結果集中位置,並允許您逐行對結果集執行多個操作,可以選擇是否返回原始表格。 換句話說,游標在概念上會根據資料庫內的資料表傳回結果集。 數據指標因此命名,因為它表示結果集中的目前位置,就像計算機畫面上的游標表示目前的位置一樣。

在深入瞭解 ADO 中游標的使用細節之前,務必要先熟悉游標的概念。

使用資料指標,您可以:

  • 指定結果集中特定數據列的位置。

  • 根據目前的結果集位置擷取一個數據列或數據列區塊。

  • 修改結果集中目前位置的數據列中的數據。

  • 定義其他使用者對數據變更的不同敏感度層級。

例如,請考慮向潛在買家顯示可用產品清單的應用程式。 買家會捲動清單以查看產品詳細數據和成本,最後選取要購買的產品。 其他捲動和選取範圍會在清單的其餘部分發生。 就購買者而言,產品會一次顯示一個,但應用程式使用可捲動的游標來瀏覽整個結果集。

您可以透過各種方式使用游標:

  • 完全沒有數據列。

  • 使用單一數據表中的部分或所有數據列。

  • 使用邏輯聯結數據表中的部分或所有數據列。

  • 在游標或欄位層級做為唯讀或可更新。

  • 作為僅向前或完全可捲動的選項。

  • 使用位於伺服器上的方向鍵組。

  • 對其他應用程式所造成的基礎表變更敏感(例如成員資格、排序、插入、更新和刪除)。

  • 存在於伺服器或用戶端上。

只讀游標可協助使用者瀏覽結果集,而讀寫游標則可以進行個別行的更新操作。 可以定義具有指向基表行的鍵集的複雜游標。 雖然有些游標僅能向前唯讀,但有些游標可以來回移動,並根據其他應用程式對資料庫所做的變更動態更新結果集。

並非所有應用程式都需要使用游標來存取或更新資料。 某些查詢不需要使用指標來直接更新資料列。 游標應該是您選擇用來擷取數據的最後一種技術之一,然後您應該選擇影響最小的游標。 當您使用預存程式建立結果集時,使用資料指標編輯或更新方法無法更新結果集。

併發

在某些多使用者應用程式中,提供給終端使用者的數據必須盡可能最新。 這類系統的傳統範例是航空公司預訂系統,許多使用者可能爭奪指定航班上的相同座位(因此,單一記錄)。 在這種情況下,應用程式設計必須在單一記錄上處理並行作業。

在其他應用程式中,並行並不重要。 在這種情況下,隨時保留數據所牽涉到的費用是無法證明的。

位置

游標也會追蹤結果集中目前的位置。 將游標位置視為目前記錄的指標,類似於陣列索引指向陣列中該特定位置的值。

可捲動性

應用程式使用的游標類型也會影響在結果集中前後移動資料列的功能。這有時被稱為可卷動性。 透過結果集向前移動 的能力會增加數據指標的複雜度,因此實作成本更高。 因此,您應該在必要時才要求具有這項功能的游標。