MySQL 8.3 Release Notes
服务器端游标是在 C API 中使用 mysql_stmt_attr_set()
函数实现的。相同的实现也用于存储过程中的游标。服务器端游标使结果集可以在服务器端生成,但只有客户端请求的行才会被传输。例如,如果客户端执行查询但只对第一行感兴趣,剩余的行将不会被传输。
在 MySQL 中,服务器端游标被materialized为一个内部临时表。最初,这是一个 MEMORY
表,但当其大小超过 max_heap_table_size
和 tmp_table_size
系统变量的最小值时,它将被转换为 MyISAM
表。与其他内部临时表的使用相同,对于游标生成的内部临时表也适用相同的限制。见 第 10.4.4 节,“MySQL 中的内部临时表使用”。实现的一个限制是,对于大结果集,通过游标检索其行可能很慢。
游标是只读的;您不能使用游标来更新行。
UPDATE WHERE CURRENT OF
和 DELETE WHERE CURRENT OF
未实现,因为不支持可更新游标。
游标不是持久的(在提交后不会保持打开状态)。
游标是敏感的。
游标是不可滚动的。
游标不是命名的。语句处理程序充当游标 ID。
您只能打开一个游标 per prepared 语句。如果您需要多个游标,必须准备多个语句。
如果语句不支持 prepared 模式,您不能使用游标来生成结果集。这包括语句如 CHECK TABLE
、HANDLER READ
和 SHOW BINLOG EVENTS
。