【发布时间】:2016-03-02 00:21:13
【问题描述】:
我正在使用事务来更改 SQL 数据库。据我了解,这意味着对数据库的更改将以全有或全无的方式发生。我想知道的是,这对读取有任何保证吗?例如,假设我有一些像这样的(伪)代码:
1) start TRANSACTION
2) INSERT INTO users ... // insert some data
3) count = SELECT COUNT(*) FROM ... // count something in the database
4) if count > 10: // do something based on the read
5) INSERT INTO other_table ... // write based on the read
6) COMMMIT TRANSACTION
在这段代码中,我正在执行INSERT,然后是SELECT,然后根据SELECT 的结果有条件地执行另一个INSERT。
所以我的问题是,如果另一个进程在步骤 (3) 和 (5) 之间修改数据库,count 变量和我的事务会发生什么情况?
如果有什么不同,我正在使用 PostgreSQL。
【问题讨论】:
标签: postgresql acid