AnalyticDB PostgreSQL版支援標準資料庫事務ACID屬性,提供了三種隔離等級。AnalyticDB PostgreSQL版為分布式MPP架構,支援節點水平擴充,同時保證節點間事務的強一致屬性。本文介紹AnalyticDB PostgreSQL版的交易隔離等級及事務的相關操作。
隔離等級
AnalyticDB PostgreSQL版支援以下三種交易隔離等級,預設為讀已提交(READ COMMITTED)。
- 讀未提交(READ UNCOMMITTED):SQL標準中的髒讀(READ UNCOMMITTED )文法定義,但實際按讀已提交(READ COMMITTED)執行。
- 讀已提交(READ COMMITTED):SQL標準中的讀已提交(READ COMMITTED)文法定義,按讀已提交(READ COMMITTED)層級執行。
- 可序列化(SERIALIZABLE):SQL標準中的可序列化(SERIALIZABLE)文法定義,但實際按可重複讀(REPEATABLE READ)層級執行。
說明 AnalyticDB PostgreSQL版Serverless模式目前僅支援讀已提交層級。
樣本:
使用可序列化(SERIALIZABLE)隔離等級開始事務塊:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;BEGIN;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;AnalyticDB PostgreSQL版提供了下列交易管理相關的SQL命令:
- BEGIN或者START TRANSACTION 開始一個事務塊。
- END或者COMMIT提交一個事務的結果。
- ROLLBACK放棄一個事務而不做任何更改。
- SAVEPOINT在一個事務中標記一個位置並且允許做部分復原。使用者可以復原在一個儲存點之後執行的命令但保留該儲存點之前執行的命令。
- ROLLBACK TO SAVEPOINT 復原一個事務到一個儲存點。
- RELEASE SAVEPOINT 銷毀一個事務內的儲存點。
樣本:
在事務中建立一個儲存點,後來撤銷在它建立之後執行的所有命令的效果:
BEGIN;
INSERT INTO table1 VALUES (1);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (2);
ROLLBACK TO SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (3);
COMMIT;上面的事務將插入值1和3,但不會插入2。
要建立並且稍後銷毀一個儲存點:
BEGIN;
INSERT INTO table1 VALUES (3);
SAVEPOINT my_savepoint;
INSERT INTO table1 VALUES (4);
RELEASE SAVEPOINT my_savepoint;
COMMIT;上面的事務將插入值3和4。