游标和锁定
在 Microsoft SQL Server 2005 Compact Edition (SQL Server Compact Edition) 中,游标定义中的 SELECT 语句受限于应用到任何其他 SELECT 语句中的相同事务锁定规则。任何 SELECT 语句(包括游标定义中的 SELECT 语句)所获取的事务锁都由以下因素控制:
- 为连接所设置的事务隔离级别
- 在 FROM 子句中指定的任何锁定提示。
只对于基表或索引游标而言,事务隔离级别可能会影响到所获取的锁。
重要事项: |
---|
对于 READ COMMITTED 的默认隔离级别,SQL Server Compact Edition 不会在定位或读取数据时获取锁。READ COMMITTED 中的游标要求 Sch-S 锁以保护游标打开时架构的稳定性。如果数据被更改,则采用排他锁。 |
锁一直持有到同时用于游标和独立 SELECT 语句的当前事务结束为止。
获取锁
尽管对于所获取的事务锁类型而言,游标遵循的规则与独立 SELECT 语句的规则相同,但获取锁的时间却不相同。独立 SELECT 或游标生成的锁始终是在要求行时获取的。对于独立 SELECT,在执行该语句时,会检索所有行。游标会根据游标类型在不同时间检索行:
- 静态游标会在打开游标时检索整个结果集。这会在打开时锁定结果集的每行。
- 键集驱动的游标会在打开游标时检索结果集的每行中的键。这会在打开时锁定结果集的每行。
- 在提取只进游标之前,它们不会检索行。在定位行之前,不会在行上获取锁。