数据库表行防止多个用户访问

时间:2014-09-30 09:28:48

标签: database spring postgresql

我正在使用PostgreSQL和java spring应用程序,并且要求是,如果任何用户在表中访问任何行,那么如果同一时间另一个用户将尝试访问同一行,那么此用户将获得此行已经在使用的警报某人。

所以请任何人让我知道我需要努力实现这一目标,意味着

a)数据库级

b)我的春季java应用程序级别。

如果您对此要求有任何疑问,请与我分享。

先谢谢你。

2 个答案:

答案 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子句(如上所示),如果该行已被其他事务锁定,则会引发异常。

另外,它会等待(并冻结),直到另一个锁释放它自己(通过提交/回滚事务),这个查询将获得一个新锁。