假设我在 PostgreSQL 中有如下表:
CREATE TABLE A
(
userid integer,
productid integer,
description citext,
price numeric
)
及其上的一些触发器:
CREATE TRIGGER afterinsert
AFTER INSERT
ON A
FOR EACH ROW
EXECUTE PROCEDURE DoSomething1();
CREATE TRIGGER beforeinsert
BEFORE INSERT
ON A
FOR EACH ROW
EXECUTE PROCEDURE DoSomething2();
现在,如果我这样做:
Insert into A values (1,3,'some description',100.5)
将会发生的是:
beforeinsert
运行DoSomething2()
该行被插入到
A
afterinsert
运行DoSomething1()
我的问题是,如果数据库在 2 到 3 之间关闭,会发生什么情况?
当它再次开始时……会发生什么?它会回滚插入的行并回滚 beforeinsert
触发器吗?
基本上我只是不明白在这种情况下什么被认为是原子操作。是 Insert + 触发器还是行?
最佳答案
触发器是事务的一部分,在它们完成运行之前不会提交。如果数据库在事务提交之前关闭,它将被回滚。回滚会影响事务中所做的所有更改,包括触发器所做的更改。
关于sql - 在触发器执行之前数据库关闭会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33338614/