如何判断一行是不是被锁定?

Posted

技术标签:

【中文标题】如何判断一行是不是被锁定?【英文标题】:How to tell if a row is locked?如何判断一行是否被锁定? 【发布时间】:2017-02-27 16:37:05 【问题描述】:

在 INFORMIX 中对表行进行选择时,如果不使用“for update”构造,如何知道它当前是否被另一个用户锁定?

【问题讨论】:

【参考方案1】:

有趣的问题,我很想知道您提出这个问题的动机和最终目标! 我不相信有一种方法(通过 select 语句,没有更新)来找出一行中是否有共享锁。只有当您的会话尝试修改该行时,您才会发现其他会话是否持有共享锁。 如果您只想知道一行是否持有排他锁,那么您可以将会话隔离级别设置为可重复读取。set isolation to repeatable read; select * from tab1 where col1=1; 以上信息还假设表本身使用行级锁(默认为页级锁)。 注意:可重复读取是最严格的隔离级别。 (https://www.ibm.com/support/knowledgecenter/SSGU8G_12.1.0/com.ibm.sqls.doc/ids_sqs_0030.htm)

【讨论】:

我有一行信息要在应用程序中处理,这基本上是多个内部连接的结果。最终,处理完成后,只有一个表得到更新(此时,应用程序因锁而终止)。 您想知道哪个会话持有该行的锁吗?它可能是尝试同时读取或更新的任何其他会话(取决于隔离级别)。如果您拥有 DBA 权限,则可以采取许多措施来减少并发会话之间的争用。 不,只是想知道我正在处理的当前行是否被锁定(不管是谁锁定它)。 @mihirp724 您在应用程序中真正需要的是在锁定行的情况下进行某种错误处理。没有完美的方法来做您想做的事情(假设我了解确切的用例!),即选择一行,检查它是否有任何锁,如果没有锁定则更新它。原因是在并发系统中,您永远无法确定给定行是否将被锁定。即使在检查时没有锁,也可能在检查后立即被锁定!

以上是关于如何判断一行是不是被锁定?的主要内容,如果未能解决你的问题,请参考以下文章

如何在代码中判断用户是不是在其设置菜单中“锁定了音量”

jquery draggable 怎么判断当前控件是不是被禁止拖动

ABAPSAP判断单据是否被锁定

如何判断两个像素是不是属于同一行

判断NumLock键和CapsLock键是否被锁定

如何判断您当前是不是位于 HTML 表格的最后一行?