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
之类的语句。