匿名事务
匿名事务,又称自治事务,是独立的实体,它不与主事务共享锁、资源或依赖等,可用于子程序、对象的方法等。匿名事务可以进行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 |