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

SQL Anywhere 11.0.1 (中文) » UltraLite - 数据库管理和参考 » UltraLite 简介 » UltraLite 事务和状态管理

 

UltraLite 事务处理

事务是自动执行操作的逻辑组:或者事务中的所有操作都存储在数据库中,或者一个都不存储。UltraLite 应用程序对 UltraLite 运行时的访问进行了序列化。当可能同时打开多个事务时,UltraLite 每次仅处理一个事务。此行为意味着应用程序无法:

  • 拥有阻塞的事务(也称为死锁)。UltraLite 从不阻塞基于现有行锁的请求。这种情况下,UltraLite 立即返回一个错误。

  • 覆盖未完成的修改。一个事务无法覆盖另一个事务的未完成的修改。当某个事务更改一行时,UltraLite 锁定该行直至提交回退该事务。锁定可以防止其它事务更改此行,但它们仍能读取此行。

例如,A 和 B 两个应用程序从数据库读取相同的行,并都根据它们读取的数据为该行的某列计算新值。如果 A 使用它的新值更新行,然后 B 尝试修改同一行,则 B 会得到一个错误。尝试更改锁定的行会导致错误 SQLCODE SQLE_LOCKED,而尝试更改已删除的行会导致错误 SQLE_NOTFOUND。因此,应这样编写应用程序使它在尝试修改数据之后检查 SQLCODE 值。

有关如何处理错误的详细信息,请参见:

编程提示

所有的 UltraLite API—除了 C++ API—都可以在自动提交 模式中操作。一些 API 在缺省情况下使用自动提交。

此缺省设置意味着在每次操作后,将自动提交每个事务。如果使用这些接口,则必须关闭自动提交设置,以便利用多操作事务。关闭自动提交的方法取决于所用的编程接口。在大多数接口中,自动提交是连接对象的一个属性。

请参见: