2014-09-30 55 views
0

我正在使用PostgreSQL与Java弹簧应用程序和要求是,如果任何用户的表访问任何行然后如果同一时间另一个用户将尝试访问同一行然后此用户将获得此行的警报已被某人使用。多个用户访问数据库表行预防

所以,请任何一个让我知道我必须努力实现这一目标,意味着

一)数据库级

B)我的Spring Java应用水平。

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

先谢谢您。

+0

您可能会读相同的话题:http://stackoverflow.com/questions/8877299/preventing-simultaneous-db-table-row-access – LukeHolt 2014-09-30 09:34:45

+1

你真的想避免两个用户阅读同一行吗?可能你正在寻找可序列化的隔离级别。请参阅http://www.postgresql.org/docs/current/static/transaction-iso.html和可序列化的级别部分。确保您了解在可序列化中设置隔离级别的含义。 – Jayadevan 2014-09-30 15:21:40

回答

0

看看Postgresql Explicit Locking,或许Row-level Locks部分帮助给你。

+0

好的,你有没有任何例子或样本,这个链接看起来像表标签锁 – user3069091 2014-09-30 10:12:47

0

在事务中,您可以执行SELECT FOR UPDATE来锁定查询中涉及的一行(或多行)。

SELECT * 
    FROM YOUR_TABLE 
WHERE YOUR_CONDITION 
    FOR UPDATE 
    NOWAIT -- THIS IS OPTIONAL 

如果添加NOWAIT条款(如上图所示),它将如果该行已经被其他事务锁定抛出异常。

其他方面,它会等待(并冻结),直到其他锁释放它自己(通过提交/回滚事务),并且此查询将获得新的锁。

相关问题