Postgresql双重交易?

Postgresql double transaction?

我得到了一个 SQL 代码的示例,其中包含 2 个事务,一个接一个。这可能吗?如果是这样,那一个占上风,答案是什么?

要粘贴代码>

    CREATE TABLE cc ( 
  num integer PRIMARY KEY, 
  salary numeric(6,2) DEFAULT 0 
); 

INSERT INTO cc VALUES (1111, 1000.00); 
INSERT INTO cc VALUES (2222, 2000.00);

Session1 BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; 
Session1 UPDATE cc SET salary = salary - 100.00 WHERE num = 2222; 
    Session2 BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; 
    Session2 UPDATE cc SET salary = salary + 100.00 WHERE num = 2222; 
Session1 ROLLBACK; 
    Session2 COMMIT;

那么,首先,这在 PostgreSQL 中可能吗? 2笔交易的逻辑是什么?并且通过例子来看,ROLLBACK 1st 和 COMMIT 2nd 之后,最后的薪水是多少?

提前致谢!

带有评论的流程:

Session1 BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; 
Session1 UPDATE cc SET salary = salary - 100.00 WHERE num = 2222; 
-> Session 1 locks row 2222

    Session2 BEGIN TRANSACTION ISOLATION LEVEL READ COMMITTED; 
    Session2 UPDATE cc SET salary = salary + 100.00 WHERE num = 2222; 
    -> Session 2 waits for row 2222

Session 1 ROLLBACK; 
-> Session 1 frees row 2222
    -> Session 2 executes UPDATE

    Session 2 COMMIT;
    -> UPDATE 2 is commited

BEGIN TRANSACTION 不锁定任何东西。 UPDATE 锁定要修改的行。

了解 Transaction Isolation and BEGIN.