意图锁(也称为意图更新锁)表示修改特定行的意图。事务进行以下操作时,会获取意图锁:
发出 FETCH FOR UPDATE 语句
发出 SELECT ...FOR UPDATE BY LOCK 语句
将 SQL_CONCUR_LOCK 用作 ODBC 应用程序中的并发基础(使用 SQLSetStmtAttr ODBC API 调用的 SQL_ATTR_CONCURRENCY 参数设置)
意图锁不会与读锁定冲突,因此获取意图锁不会阻塞其它事务读取同一行。但是,意图锁会防止其它事务在同一行上获取意图所或写锁定,这样就保证了在更新前该行无法被任何其它事务所更改。
如果以快照隔离执行的事务请求意图锁,则仅当该行在数据库中未修改且为所有并发事务公用时,才会获取意图锁。但是,如果该行是快照副本,则不会获取意图锁,因为原始行已被其它事务所修改。快照事务要更新该行的任何尝试都将失败,并会返回快照更新冲突错误。
Copyright © 2009, iAnywhere Solutions, Inc. - SQL Anywhere 11.0.1 |