Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 创建数据库 » 使用事务和隔离级别 » 锁定的工作方式

 

可以锁定的对象

为了确保数据库一致性并支持事务之间适当的隔离级别,SQL Anywhere 使用以下类型的锁:

  • 模式锁   这些锁控制进行模式更改的能力。例如,事务可以锁定表的模式,以防止其它事务修改该表的结构。

  • 行锁   这些锁用于确保行级别上并发事务之间的一致性。例如,事务可锁定特定的行以防止另一个事务对其进行更改,且如果要修改行,则事务必须在该行上放置一个写锁定。

  • 表锁   这些锁用于确保表级别上并发事务之间的一致性。例如,通过插入新列更改表结构的事务可锁定一个表,这样其它事务就不会受到模式更改的影响。在这种情况下,必须限制其它事务进行访问,以防止出现错误。

  • 位置锁   这些锁用于确保表的顺序扫描或索引扫描内的一致性。事务通常使用由索引确定的顺序对行进行扫描,或按顺序对行进行扫描。在这两种情况下,都可以将锁放置在扫描位置上。例如,在索引中放置锁可以防止其它事务插入具有特定值或特定值范围的行。

模式锁提供了一种机制,以防止模式更改无意间影响正在执行的事务。行锁、表锁和位置锁每一种都有单独的用途,但是它们相交互。每种锁都能防止一类特定的不一致。根据您选择的隔离级别,数据库服务器将使用这些锁类型中的一些或全部来保持您所要求的一致性等级。

锁持续时间

不同类的锁可保持不同的时间:

  • 位置   短期锁定,如特定行上用于在隔离级别 1 实现游标稳定性的读锁定。

  • 事务   一直保持到事务结束的行锁、表锁和位置锁。

  • 连接   一直保持到事务结束之后的模式锁,如使用 WITH HOLD 游标时创建的模式锁。