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 的用法 » 创建数据库 » 使用事务和隔离级别 » 锁定的工作方式 » 行锁

 

意图锁

意图锁(也称为意图更新锁)表示修改特定行的意图。事务进行以下操作时,会获取意图锁:

  • 发出 FETCH FOR UPDATE 语句

  • 发出 SELECT ...FOR UPDATE BY LOCK 语句

  • 将 SQL_CONCUR_LOCK 用作 ODBC 应用程序中的并发基础(使用 SQLSetStmtAttr ODBC API 调用的 SQL_ATTR_CONCURRENCY 参数设置)

意图锁不会与读锁定冲突,因此获取意图锁不会阻塞其它事务读取同一行。但是,意图锁会防止其它事务在同一行上获取意图所或写锁定,这样就保证了在更新前该行无法被任何其它事务所更改。

如果以快照隔离执行的事务请求意图锁,则仅当该行在数据库中未修改且为所有并发事务公用时,才会获取意图锁。但是,如果该行是快照副本,则不会获取意图锁,因为原始行已被其它事务所修改。快照事务要更新该行的任何尝试都将失败,并会返回快照更新冲突错误。