13.6.6.5 服务器端游标的限制

服务器端游标是使用mysql_stmt_attr_set()函数在 C API 中实现的。存储的例程中的游标使用相同的实现。服务器端游标使结果集可以在服务器端生成,但是除了 Client 端请求的那些行之外,不会传输到 Client 端。例如,如果 Client 端执行查询但仅对第一行感兴趣,则不传输其余行。

在 MySQL 中,服务器端游标被实现为内部临时 table。最初,这是一个MEMORYtable,但是当其大小超过max_heap_table_sizetmp_table_size系统变量的最小值时,将转换为MyISAMtable。对于内部临时 table 和内部临时 table 的其他用途一样,这些限制也适用于为保存游标的结果集而创建的内部临时 table。参见第 8.4.4 节“ MySQL 中的内部临时 table 使用”。该实现的一个限制是,对于较大的结果集,通过游标检索其行可能很慢。

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

由于不支持可更新的游标,因此未实现UPDATE WHERE CURRENT OFDELETE WHERE CURRENT OF

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

游标不敏感。

游标是不可滚动的。

游标未命名。语句处理程序充当游标 ID。

每个准备好的语句只能打开一个游标。如果需要多个游标,则必须准备多个语句。

如果在准备模式下不支持该语句,则不能将游标用于生成结果集的语句。这包括诸如CHECK TABLEHANDLER READ显示 BINLOG 事件的语句。