MySQL 9.0 發行說明
伺服器端游標是透過 C API 中使用 mysql_stmt_attr_set()
函式來實作的。相同的實作方式也用於儲存程序中的游標。伺服器端游標允許在伺服器端產生結果集,但除了用戶端請求的列之外,不會傳輸到用戶端。例如,如果用戶端執行一個查詢,但只對第一列感興趣,則其餘列不會傳輸。
在 MySQL 中,伺服器端游標會實體化為內部臨時表。最初,這是一個 MEMORY
表,但當其大小超過 max_heap_table_size
和 tmp_table_size
系統變數的最小值時,會轉換為 MyISAM
表。與其他使用內部臨時表的情況一樣,為游標保存結果集而建立的內部臨時表也適用相同的限制。請參閱第 10.4.4 節「MySQL 中內部臨時表的使用」。此實作的一個限制是,對於大型結果集,透過游標檢索其列可能會很慢。
游標是唯讀的;您無法使用游標來更新列。
由於不支援可更新的游標,因此未實作 UPDATE WHERE CURRENT OF
和 DELETE WHERE CURRENT OF
。
游標是不可保持的(在 commit 後不會保持開啟)。
游標是不敏感的。
游標是不可捲動的。
游標沒有命名。語句處理器充當游標 ID。
每個預備語句只能有一個開啟的游標。如果您需要多個游標,則必須準備多個語句。
如果語句在預備模式下不受支援,則您不能將游標用於產生結果集的語句。這包括諸如 CHECK TABLE
、HANDLER READ
和 SHOW BINLOG EVENTS
等語句。