【问题标题】:What is an SQL Cursor?什么是 SQL 游标?
【发布时间】:2025-12-09 16:25:01
【问题描述】:

在我的脑海中,我一直认为数据库中的游标是用于访问结果集的指针。但我听说游标有隔离级别。那么也许游标不仅仅是一个指针?
那么看起来具有稳定性级别的 SQL 游标到底是什么?

【问题讨论】:

  • 这有点像 pointerselect 结果 example

标签: mysql sql cursor resultset isolation-level


【解决方案1】:

SQL 游标是应用程序用来逐行操作集合中数据的数据库对象

您可以查看MYSQL Transaction

附带说明:-

游标存在性能问题,因此请尽量避免使用它们!

【讨论】:

  • 但我们只在通过应用程序代码访问数据库时使用它,例如爪哇?因为我认为我从未见过使用 CURSOR 的“原始”SQL 语句示例
  • 可能在更多情况下你会发现使用了游标!
  • 从你的图表看来,游标是事务的某种辅助对象。那么它与隔离级别、稳定性等有什么关系呢?
  • 虽然它来自 IBM,但我不认为这可能有任何不同的原因:- 与级别 RR 和 RS 一样,级别光标稳定性 (CS) 确保任何已更改的行(或当前被 UPDATE 行锁锁定)由另一个使用不同提交定义的激活组在提交之前无法读取。与 RR 和 RS 不同,级别 CS 仅确保每个可更新游标的当前行不会被使用不同承诺定义的其他激活组更改。 ......继续
  • 作为旁注,光标很慢,应尽可能避免
【解决方案2】:

Cursor 是数据库引擎空间(对象或数字)中的指针。所以它是一个标识符,可用于从 sql 引擎获取您的查询(已经完成,但未获取)。

例如对于像select * from somebigtable 这样的简单查询,游标将指向行标题的列表结构,并且只有在您询问时才会从磁盘中获取行。

【讨论】:

  • 那么说游标的稳定性和隔离性是什么意思?