MySQL 5.0.2 引入服務端游標,透過 C API mysql_stmt_attr_set() 設定 STMT_ATTR_CURSOR_TYPE 為 CURSOR_TYPE_READ_ONLY 啟用。游標讓結果集留在服務端,客戶端按需逐行或分批抓取,減少網路傳輸與客戶端記憶體壓力。
WHERE CURRENT OF:無 UPDATE/DELETE WHERE CURRENT OF cursor 語法COMMIT 後游標自動關閉NEXT 方向,無 PRIOR/FIRST/LAST/ABSOLUTE/RELATIVEPREPARE 語句以下語句在預處理模式下不支援,故無法使用游標:
CHECK TABLEHANDLER READSHOW BINLOG EVENTSmysql_stmt_fetch() 非阻塞輪詢,避免客戶端超時MYSQL_STMT *stmt = mysql_stmt_init(mysql);
mysql_stmt_prepare(stmt, "SELECT * FROM huge_table WHERE id > ?", strlen(...));
mysql_stmt_attr_set(stmt, STMT_ATTR_CURSOR_TYPE, (void*)CURSOR_TYPE_READ_ONLY);
mysql_stmt_bind_param(stmt, bind_param);
mysql_stmt_execute(stmt);
mysql_stmt_bind_result(stmt, bind_result);
while (mysql_stmt_fetch(stmt) == 0) {
// 處理單行
}
mysql_stmt_close(stmt);
MySQL 服務端游標功能精簡、限制明確,定位於「唯讀、單向、非持久」的串流消費場景。若需雙向捲動、可更新游標或長事務持久化,請在應用層實現邏輯或評估其他資料庫方案。