4

我有个问题。事务隔离级别设置为可序列化。当一个用户打开一个事务并在“table1”中插入或更新数据然后另一个用户打开一个事务并尝试将数据插入同一个表时,第二个用户是否需要等待直到第一个用户提交事务?

4

2 回答 2

3

一般来说,没有。第二个事务只是插入,因此除非需要进行唯一索引检查或其他触发器,否则可以无条件插入数据。在唯一索引(包括主键)的情况下,如果两个事务都在更新具有相同值的行,它将阻塞,例如:

-- Session 1                           -- Session 2
CREATE TABLE t (x INT PRIMARY KEY);
BEGIN;
INSERT INTO t VALUES (1);
                                       BEGIN;
                                       INSERT INTO t VALUES (1);  -- blocks here
COMMIT;
                                       -- finally completes with duplicate key error

在可能影响其他事务插入的更新的情况下,事情就不那么明显了。我了解 PostgreSQL 在这种情况下还不支持“真正的”可序列化。我不知道其他 SQL 系统对它的支持程度。

http://www.postgresql.org/docs/current/interactive/mvcc.html

于 2010-06-10T02:51:37.327 回答
-1

第二个用户将被阻止,直到第一个用户提交或回滚他/她的更改。

于 2010-06-10T02:46:17.017 回答