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。