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.
我得到了一个 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.