Chr*_*ian 3 sql postgresql concurrency transactions isolation-level
鉴于这种情况:
TIME TRANSACTION 1 TRANSACTION 2
1sec BEGIN
2sec INSERT RECORDS INTO T1
3sec (doing other things) BEGIN
4sec (doing other things) (doing other things)
5sec COMMIT (doing other things)
6sec SELECT * FROM T1 <<- GETS ROWS INSERTED BY T1
Run Code Online (Sandbox Code Playgroud)
根据postgres文档:
另请注意,如果其他事务在执行第一个SELECT期间提交更改,则两个连续的SELECT命令可以看到不同的数据,即使它们位于单个事务中
问题是:如何避免SELECT在事务开始和查询开始之间提交行.
您所描述的情况被称为"幻象",是不可能的,当您使用防止了这种类似的隔离级别REPEATABLE READ或SERIALIZABLE.
http://www.postgresql.org/docs/current/static/transaction-iso.html
您可以使用以下SET TRANSACTION命令更改隔离级别:
http://www.postgresql.org/docs/current/static/sql-set-transaction.html
根据用于连接数据库的接口,您也可以使用相应的API调用(例如,Connection.setTransactionIsolation()在Java/JDBC中)
| 归档时间: |
|
| 查看次数: |
83 次 |
| 最近记录: |