我有一张桌子,我用id锁定了它以进行更新。
select name from tablename where id=2 for update
如何测试db表中的相关行已被锁定。
答案 0 :(得分:1)
如果您确定带有id=2
的行存在,则可以使用:
select name from tablename where id=2
for update skip locked
如果结果为空,则表示该行已被另一个用户锁定(或不存在)。
您还可以使用:
select name from tablename where id=2
for update nowait
如果该行存在并且被另一用户锁定,则查询将引发错误。
答案 1 :(得分:0)
是出于学习或培训目的,如果不是,您想要达到的目标是什么?
打开两个连接(例如,使用“ psql”),然后每次运行:
begin; select name from tablename where id=2 for update;
第二个应该阻塞,直到第一个执行回滚或提交。这种阻塞是锁定的证据。有很多变体,一个或另一个或两者可能都在执行实际的UPDATE,而不是SELECT ... FOR UPDATE。