MySQL 8.4 發行說明
伺服器端游標是在 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
。
游標是不可保留的(在提交後不會保持開啟)。
游標是無感的。
游標是不可捲動的。
游標沒有命名。陳述式處理常式充當游標 ID。
每個預處理陳述式只能開啟一個游標。如果需要多個游標,則必須預處理多個陳述式。
如果陳述式在預處理模式中不受支援,則不能將游標用於產生結果集的陳述式。這包括諸如 CHECK TABLE
、HANDLER READ
和 SHOW BINLOG EVENTS
等陳述式。