您好,我是小DAI,专注于数据库管理员相关的技术问答,请问有什么可以帮您?

DML 操作的表锁

数据操作语言 (DML) 操作包括插入、删除、更新和查询。对于所有此类操作,表级快照版本控制允许在任意给定表上使用一个写入程序和多个读取程序。

在表级快照版本控制中:

  • 读取事务不会阻塞写入事务。

  • 写入事务不会阻塞读取事务。

  • 一名更新用户和多名只读用户可以并发访问某个表。

  • 一次只有一名用户可以更新给定表中的数据。

    第一个在写入模式下打开表的事务会获取对该表的访问权限。第二个尝试在写入模式下打开该表的事务会收到错误。在当前事务中,任何其它向该表中写入数据的尝试都会失败。事务可以继续,但只能执行读取操作或对其它表执行写入操作。

    SAP IQ 支持共享、写入和独占锁定排入队列,允许您将表锁定指定的一段时间。可以同时对多个表执行写锁定。

    为避免因后续 DML 语句导致的将来版本错误,请使用 LOCK TABLE 语句对计划修改的一个表或一组表保持写锁定。

    如果发生死锁,被阻塞的最后一个 LOCK TABLE 语句常常会回退,系统会将有关所发生死锁的形式的错误返回给该事务。

    在某些情况下,必须发出 COMMITROLLBACK 语句。例如,当 DML 语句因完整性约束原因而失败时,需要显式执行 COMMITROLLBACK 才能释放锁。

    如果 DML 语句因所引用的表中存在参照完整性违规或其它表中的锁不可用而失败,将会出现: “SQL Anywhere 错误 -210”。