【发布时间】:2016-04-20 15:06:32
【问题描述】:
当您在多线程环境中收到同一字段的并发插入和更新时,有没有办法解决问题。
例子
线程 1
BEGIN
insert into users (name,age) values('spiderman',27)
COMMIT
线程 2
BEGIN
update into users set age = 26 where name='spiderman';
COMMIT
大多数时候 update(transaction) 不知道插入的发生,因此它会抛出错误。
我在这里看到的是竞争条件的经典示例,避免竞争条件的一种方法是使用有效锁。
如何在数据库中尚不存在的记录上应用锁(记录)。
在上面的插入语句示例中,更新知道该记录还没有在数据库中。
【问题讨论】:
-
在网络环境中,使用en.wikipedia.org/wiki/Optimistic_concurrency_control(参见JPA中的@Version注解)
标签: multithreading postgresql concurrency