我注意到我的应用程序中存在奇怪的行为。看起来提交数据在提交后不可见。算法如下所示:
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),它看起来像提交完成但稍后更改在DB中。我使用java和jdbc。任何想法都将不胜感激。
答案 0 :(得分:1)
此行为对应于REPEATABLE READ隔离模式,请参阅SET TRANSACTION:
可重复阅读 当前事务的所有语句只能看到之前提交的行 第一个查询或数据修改语句 在这次交易中执行了。
尝试connection.setTransactionIsolation(Connection.TRANSACTION_READ_COMMITTED)
,看看它是否有所作为。