Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Restrictions on Server-Side Cursors

15.6.6.5 服务器端游标限制

服务器端游标是在 C API 中使用 mysql_stmt_attr_set() 函数实现的。相同的实现也用于存储过程中的游标。服务器端游标使结果集可以在服务器端生成,但只有客户端请求的行才会被传输。例如,如果客户端执行查询但只对第一行感兴趣,剩余的行将不会被传输。

在 MySQL 中,服务器端游标被materialized为一个内部临时表。最初,这是一个 MEMORY 表,但当其大小超过 max_heap_table_sizetmp_table_size 系统变量的最小值时,它将被转换为 MyISAM 表。与其他内部临时表的使用相同,对于游标生成的内部临时表也适用相同的限制。见 第 10.4.4 节,“MySQL 中的内部临时表使用”。实现的一个限制是,对于大结果集,通过游标检索其行可能很慢。

游标是只读的;您不能使用游标来更新行。

UPDATE WHERE CURRENT OFDELETE WHERE CURRENT OF 未实现,因为不支持可更新游标。

游标不是持久的(在提交后不会保持打开状态)。

游标是敏感的。

游标是不可滚动的。

游标不是命名的。语句处理程序充当游标 ID。

您只能打开一个游标 per prepared 语句。如果您需要多个游标,必须准备多个语句。

如果语句不支持 prepared 模式,您不能使用游标来生成结果集。这包括语句如 CHECK TABLEHANDLER READSHOW BINLOG EVENTS