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

SQL Anywhere 12.0.0 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 使用事务和隔离级别 » 锁定的工作方式

 

模式锁

模式锁用于序列化对数据库模式的更改,并用于确保使用表的事务不受由其它连接启动的模式更改的影响。例如,模式锁可防止 ALTER TABLE 语句在表正被另一连接上打开的游标读取时从该表删除列。

由两类模式锁:

  • 共享锁   以共享(读取)模式锁定表模式。

  • 独占锁   将表模式锁定为供单个连接独占使用。

当事务直接或间接引用数据库中的表时,会获取共享模式锁。共享模式锁不会互相冲突;任意数量的事务都可以同时在同一表上获取共享锁。共享模式锁会一直保持到通过 COMMIT 或 ROLLBACK 完成事务为止。

允许持有共享模式锁的任何连接更改表数据,只要更改不与其它连接冲突。

通常使用 DDL 语句修改表的模式时,会获取独占模式锁。ALTER TABLE 语句便是 DDL 语句的一个示例,该语句在对表进行修改之前获取该表的独占锁。任何时候只有一个连接可获取表的独占模式锁—锁定该表模式(共享或独占)的任何其它尝试都将阻塞,或失败并产生错误。这就意味着以隔离级别 0(最低限制的隔离级别)执行的连接将不能从以独占模式锁定的表中读取行。

只有持有独占表模式锁的连接才能够更改表数据。