事务管理

AnalyticDB for 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。

事务隔离级别

AnalyticDB for PostgreSQL提供以下两种SQL事务级别,默认为读已提交(READ COMMITTED)。

    • 读已提交(READ COMMITTED):SQL标准中的读未提交(READ UNCOMMITED)和读已提交(READ COMMITTED)使用读已提交(READ COMMITTED)级别。
    • 可序列化(SERIALIZABLE):SQL标准中的可重复读(REPEATABLE READ)和可序列化(SERIALIZABLE)使用可序列化(SERIALIZABLE)级别。

示例:

使用可序列化(SERIALIZABLE)隔离级别开始事务块:
BEGIN TRANSACTION ISOLATION LEVEL SERIALIZABLE;