事务管理是指在使用数据库系统时,对事务的开启、提交、回滚、保存点、分布式事务等进行管理:
启动事务:GaussDB通过START TRANSACTION和BEGIN语法启动事务
设置事务:GaussDB通过SET TRANSACTION或者SET LOCAL TRANSACTION语法设置事务
提交事务:GaussDB通过COMMIT或者END可完成提交事务的功能,即提交事务的所有操作
回滚事务:回滚是在事务运行的过程中发生了某种故障,事务不能继续执行,系统将事务中对数据库的所有已完成的操作全部撤销
存储过程本身就处于一个事务中,开始调用最外围存储过程时会自动开启一个事务,在调用结束时自动提交或者发生异常时回滚。除了系统自动的事务控制外,也可以使用COMMIT/ROLLBACK来控制存储过程中的事务。在存储过程中调用COMMIT/ROLLBACK命令,将提交/回滚当前事务并自动开启一个新的事务,后续的所有操作都会在此新事务中运行。
示例1:启动一个事务
–以默认方式启动事务。
START TRANSACTION;
SELECT * FROM tpcds.reason;
END;
–以默认方式启动事务。
BEGIN;
SELECT * FROM tpcds.reason;
END;
–以隔离级别为READ COMMITTED,读/写方式启动事务。
START TRANSACTION ISOLATION LEVEL READ COMMITTED READ WRITE;
SELECT * FROM tpcds.reason;
COMMIT;
示例2:设置事务
–开启一个事务,设置事务的隔离级别为READ COMMITTED,访问模式为READ ONLY。
START TRANSACTION;
SET LOCAL TRANSACTION ISOLATION LEVEL READ COMMITTED READ ONLY;
COMMIT;
示例3:支持在PLSQL的存储过程内使用COMMIT/ROLLBACK。
CREATE TABLE EXAMPLE1(COL1 INT);
CREATE OR REPLACE PROCEDURE TRANSACTION_EXAMPLE()
AS
BEGIN
FOR i IN 0..20 LOOP
INSERT INTO EXAMPLE1(COL1) VALUES (i);
IF i % 2 = 0 THEN
COMMIT;
ELSE
ROLLBACK;
END IF;
END LOOP;
END;
/
运行结果:
在GaussDB中,控制管理事务可以采用两个方法:原子性和隔离性。原子性指一组操作要么全部执行,要么全部不执行。隔离性指一个事务的操作不受其他事务干扰,保证并发执行时数据的一致性。
更多事务管理过程中的使用场景(支持/不支持调用的上下文环境),请参见官网示例:
事务管理_云数据库 GaussDB_开发指南(主备版_2.x版本)_存储过程_华为云




