服务器端游标在 C API 中使用 mysql_stmt_attr_set() 函数实现。存储例程中的游标也使用相同的实现。服务器端游标允许在服务器端生成结果集,但除了客户端请求的那些行之外,结果集不会传输到客户端。例如,如果客户端执行一个查询,但只需要第一行,则不传输其余的行。在 MySQL 中,服务器端游标内容会存储到一个内部临时表。最初,这是一个 MEMORY 表,但当它的大小超过 max_heap_table_size 和 tmp_table_size 系统变量的最小值时,它将转换为 MyISAM 表。对于为保存游标结果集而创建的内部临时表,与其他内部临时表的使用一样,也有相同的限制。该实现的一个限制是,对于大的结果集,通过游标检索其行可能很慢。没有实现 UPDATE WHERE CURRENT OF 和 DELETE WHERE CURRENT OF,因为不支持可更新的游标。游标只能向一个方向行进,并且不可以跳过任何一行数据。每个预编译语句只能打开一个游标。如果需要多个游标,你必须准备多个语句。对于预编译模式下不支持生成结果集的语句,则不能对该语句使用游标。这包括 CHECK TABLE、HANDLER READ 和 SHOW BINLOG EVENTS 等语句。https://dev.mysql.com/doc/refman/8.0/en/cursor-restrictions.html