#### 13.6.6.5 对服务器端游标的限制

[](<>)[](<>)

服务器端游标在 C API 中使用[`mysql_stmt_attr_set()`](https://dev.mysql.com/doc/c-api/8.0/en/mysql-stmt-attr-set.html)功能。存储例程中的游标使用相同的实现。服务器端游标允许在服务器端生成结果集，但除了客户端请求的那些行之外，不会传输到客户端。例如，如果客户端执行查询但只对第一行感兴趣，则不会传输剩余的行。

在 MySQL 中，服务器端游标被具体化为内部临时表。最初，这是一个`记忆`表，但被转换为`MyISAM`当表的大小超过最小值时[`max_heap_table_size`](server-system-variables.html#sysvar_max_heap_table_size)和[`tmp_table_size`](server-system-variables.html#sysvar_tmp_table_size)系统变量。相同的限制适用于为保存游标结果集而创建的内部临时表，与内部临时表的其他用途相同。看[第 8.4.4 节，“MySQL 中的内部临时表使用”](internal-temporary-tables.html).该实现的一个限制是，对于大型结果集，通过游标检索其行可能会很慢。

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

`更新当前的位置`和`删除当前的位置`未实现，因为不支持可更新游标。

游标是不可持有的（在提交后不保持打开）。

光标是不敏感的。

光标不可滚动。

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

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

如果在准备模式下不支持生成结果集的语句，则不能将游标用于该语句。这包括诸如[`检查表`](check-table.html),`处理程序读取`， 和[`显示 BINLOG 事件`](show-binlog-events.html).
