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
未实现,因为不支持可更新游标。
游标是非持久的(在提交后不会保持打开状态)。
游标是不敏感的。
游标不可滚动。
游标没有命名。语句句柄充当游标 ID。
每个准备好的语句只能打开一个游标。如果您需要多个游标,则必须准备多个语句。
如果语句不支持准备模式,则不能将游标用于生成结果集的语句。这包括诸如 CHECK TABLE
、HANDLER READ
和 SHOW BINLOG EVENTS
的语句。