4

我注意到我的应用程序中有奇怪的行为。提交后看起来提交的数据不可见。算法如下所示:

connection1 - insert into table row with id = 5
connection1 - commit, close
connection2 - open
connection2 - select from table row with id = 5 (no results)
connection2 - insert into table row with id = 5 (PRIMARY KEY VIOLATION, result is in db)

如果在connection2上选择没有返回结果,那么我会插入,否则它是更新的。服务器有很多数据库(~200),看起来提交已经完成,但稍后会在数据库中进行更改。我使用java和jdbc。任何想法,将不胜感激。

4

1 回答 1

2

此行为对应于 REPEATABLE READ 隔离模式,请参阅SET TRANSACTION

REPEATABLE READ
当前事务的所有语句只能看到在该事务中执行第一个查询或数据修改语句之前提交的行。

尝试connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED)看看它是否有所作为。

于 2013-04-05T10:44:19.753 回答