它们存在吗?我习惯使用dbms_lock对Oracle进行显式锁定,但在Informix上找不到任何类似的东西。
答案 0 :(得分:2)
Oracle大多数情况下使用MVCC来控制对数据库中数据的访问。
Informix和DB2(以及其他DBMS)在大多数情况下都使用锁定。
有锁定表的语句:
LOCK TABLE tablename IN { SHARE | EXCLUSIVE } MODE;
如果未记录您的数据库,则可以使用以下命令解锁表:
UNLOCK TABLE tablename;
如果您的数据库已被记录(正常情况),那么您只能锁定事务中的表,并在提交或回滚事务时释放锁。
此外,具有FOR UPDATE子句的游标将锁应用于行。然后,您需要了解隔离级别,因为读取锁定的持续时间取决于隔离级别,但更新锁定(因为行已更改)始终持续到事务结束。
实际上,如果你运行的是REPEATABLE READ(也就是SERIALIZABLE - Informix的隔离级别与标准隔离级别背后有一个复杂的故事),那么所有语句都会对处理的行应用锁,甚至用于确定哪些行的谓词被处理了。这是确保隔离的必要条件。