Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

15.6.6.5 服务器端游标限制

使用 C API 的mysql_stmt_attr_set()函数实现服务器端游标。同样,存储程序中的游标也使用相同的实现。服务器端游标使得结果集可以在服务器端生成,但除非客户端请求,否则不会传输给客户端。例如,如果客户端执行查询,但只关心第一个行记录,那么剩下的行记录不需要传输。

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

游标只能读取行记录;不能使用游标更新行记录。

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

游标不保持打开状态,即使提交事务也不会被保留。

游标是敏感的。

游标不可滚动。

游标没有名称,语句处理器充当游标ID。

你只能打开一个预准备语句对应的游标。如果需要多个游标,你必须准备多个语句。

你不能使用游标来执行生成结果集的语句,如果该语句不支持预准备模式。这包括语句如CHECK TABLEHANDLER READSHOW BINLOG EVENTS