服务器端游标是使用
mysql_stmt_attr_set()
函数在 C API 中实现的。相同的实现用于存储例程中的游标。服务器端游标允许在服务器端生成结果集,但除了客户端请求的那些行外,不会将结果集传输到客户端。例如,如果客户端执行查询但只对第一行感兴趣,则不会传输其余行。
在 MySQL 中,服务器端游标具体化为内部临时表。最初,这是一个表,但当其大小超过和
系统变量的最小值时
MEMORY
,将转换为表。与内部临时表的其他用途相同的限制适用于为保存游标的结果集而创建的内部临时表。请参阅
第 8.4.4 节,“MySQL 中的内部临时表使用”。实现的一个限制是对于大型结果集,通过游标检索其行可能很慢。
MyISAM
max_heap_table_size
tmp_table_size
游标是只读的;您不能使用游标来更新行。
UPDATE WHERE CURRENT OF
并且DELETE
WHERE CURRENT OF
未实现,因为不支持可更新游标。
游标不可保持(提交后不保持打开状态)。
光标是不敏感的。
游标不可滚动。
游标没有命名。语句处理程序充当游标 ID。
每个准备好的语句只能打开一个游标。如果需要多个游标,则必须准备多个语句。
如果语句在准备模式下不受支持,则不能将游标用于生成结果集的语句。这包括CHECK
TABLE
、HANDLER READ
和
等语句SHOW BINLOG EVENTS
。