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 根据需要使用模式锁、行锁、表锁和位置锁来确保您所要求的一致性级别。您不需要显式请求使用某个特定的锁定。而应通过选择最符合您的要求的隔离级别来控制所维护的一致性级别。了解各种锁类型有助于您选择隔离级别和理解各个级别对性能的影响。请记住,任何一个事务都不会由于获取锁定阻塞其自身;锁定冲突仅在两个(或多个)事务之间发生。

哪些锁会发生冲突?

虽然四类锁定各具有其特定用途,但所有类型的锁定交互,并因此可能导致事务之间的锁定冲突。为了确保数据库一致性,一次只能有一个事务更改任意一行。否则,两个同时执行的事务可能会尝试将一个值更改为两个不同的新值。因此,行写锁定应该是独占的,这一点非常重要。相反,如果多个事务想要读取一行,则不会出现任何问题。因为所有事务都不会更改该行,所以也不会发生冲突。因此,行读锁定可以在多个连接间共享。

下表显示了哪两种锁之间会发生冲突。模式锁未包括在内,因为它们不适用于行。

读 (R) 意图 (R) 写 (R) 共享 (T) 意图 (T) 独占 (T) 幻像 (P) 插入 (P)
读 (R) 冲突 冲突
意图 (R) 冲突 冲突 冲突
写 (R) 冲突 冲突 冲突 冲突 冲突
共享 (T) 冲突 冲突 冲突
意图 (T) 冲突 冲突
独占 (T) 冲突 冲突 冲突 冲突 冲突 冲突 冲突 冲突
幻像 (P) 冲突 冲突
插入 (P) 冲突 冲突