我正在使用PostgreSQL和java spring应用程序,并且要求是,如果任何用户在表中访问任何行,那么如果同一时间另一个用户将尝试访问同一行,那么此用户将获得此行已经在使用的警报某人。
所以请任何人让我知道我需要努力实现这一目标,意味着
a)数据库级
或
b)我的春季java应用程序级别。
如果您对此要求有任何疑问,请与我分享。
先谢谢你。
答案 0 :(得分:0)
请查看Postgresql Explicit Locking,也许Row-level Locks
部分帮助。
答案 1 :(得分:0)
在事务中,您可以执行SELECT FOR UPDATE
来锁定查询中涉及的一行(或多行)。
SELECT *
FROM YOUR_TABLE
WHERE YOUR_CONDITION
FOR UPDATE
NOWAIT -- THIS IS OPTIONAL
如果添加NOWAIT
子句(如上所示),如果该行已被其他事务锁定,则会引发异常。
另外,它会等待(并冻结),直到另一个锁释放它自己(通过提交/回滚事务),这个查询将获得一个新锁。