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 Anywhere 编程简介 » 在应用程序中使用 SQL » SQL Anywhere 游标

 

游标敏感性和隔离级别

游标敏感性和隔离级别都可解决并发控制问题,但处理方式不同,并且利弊也各不相同。

通过选择事务的隔离级别(通常在连接级别),您可以确定何时在数据库中的行上放置锁以及锁的类型。锁可以防止其它事务访问或修改数据库中的行。通常,维护的锁的数目越多,并发事务之间预期的并发级别越低。

但是,锁并不会阻止同一事务的其它部分进行更新。因此,维护多个可更新游标的单个事务无法依赖锁定来防止诸如更新丢失之类的问题。

快照隔离的目的是避免使用读取锁,其方法是确保每个事务都能查看到一致的数据库视图。显而易见的好处是无需依赖于完全可序列化事务(隔离级别 3)即可查询到一致的数据库视图,并且可以避免随使用隔离级别 3 发生的并发丢失。但是,快照隔离会带来巨大的开销,因为必须维护修改行的副本才能同时满足正在执行的并发快照事务的要求,以及尚未启动的快照事务的要求。由于存在这种副本维护,因此存在大量的更新时可能不适合使用快照隔离。请参见选择快照隔离级别

另一方面,游标敏感性确定在游标的结果中可以看见(或不能看见)哪些更改。虽然事务的影响完全取决于指定的游标类型,但因为游标敏感性是基于游标指定的,所以游标敏感性既应用于其它事务的影响,也应用于同一事务的更新活动。通过设置游标敏感性,将不直接确定何时在数据库中的行上放置锁。而是由游标敏感性与隔离级别的组合来控制对特定应用程序可能发生的各种并发情况。