sql - 在触发器执行之前数据库关闭会发生什么?

标签 sql database postgresql

假设我在 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)

将会发生的是:

  1. beforeinsert 运行 DoSomething2()

  2. 该行被插入到A

  3. afterinsert 运行 DoSomething1()

我的问题是,如果数据库在 2 到 3 之间关闭,会发生什么情况? 当它再次开始时……会发生什么?它会回滚插入的行并回滚 beforeinsert 触发器吗?

基本上我只是不明白在这种情况下什么被认为是原子操作。是 Insert + 触发器还是行?

最佳答案

触发器是事务的一部分,在它们完成运行之前不会提交。如果数据库在事务提交之前关闭,它将被回滚。回滚会影响事务中所做的所有更改,包括触发器所做的更改。

关于sql - 在触发器执行之前数据库关闭会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33338614/

相关文章:

regex - 警告 : nonstandard use of escape in a string literal

mysql - 如何根据多个排序列选择每组的第一行?

mysql - 访问数据库时保持代码模块化

通过 VBScript 的 SQLXMLBulkLoad

php - 更新mysql中每一行的表列

database - MongoDB:在没有 MapReduce 的情况下对对象中的值求和

database - 在 PostgreSQL 触发器函数中使用 pg_notify

c# - 将数据从一个数据库复制到另一个数据库 - 内存不足异常

database - 表中的独特组合

postgresql - 如何查询自定义连接表