Skip to content

匿名事务

匿名事务,又称自治事务,是独立的实体,它不与主事务共享锁、资源或依赖等,可用于子程序、对象的方法等。匿名事务可以进行SQL操作,并提交或回滚这些操作,同时不影响主事务中的提交和数据。 例如,主事务中发生事务回滚,从匿名事务之后的某处回滚至匿名事务之前的保存点,其中主事务中的操作被回滚,但匿名事务中的操作不会被回滚。

示例

主事务被回滚,主事务中的插入操作INSERT INTO tab_person VALUES('Alice', 10);被撤销,但匿名事务中的插入操作INSERT INTO tab_person VALUES('Bob', 20);不会被撤销。

sql
CREATE TABLE tab_person(name VARCHAR(10), age INT);

-- 执行匿名事务存储过程
CREATE PROCEDURE proc_anonymous_insert() as
	PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
	INSERT INTO tab_person VALUES('Bob', 20);
	COMMIT;
END;
/

-- 主事务
BEGIN
    -- 主事务中的此插入将会被回滚
	INSERT INTO tab_person VALUES('Alice', 10);
    -- 匿名事务中的语句不会被回滚
	proc_anonymous_insert();
	ROLLBACK;
END;
/

SELECT * FROM tab_person;

NAME | AGE | 
------------------------------------------------------------------------------
Bob| 20 |