【问题标题】:Automatically delete the parent object row when all the children are gone当所有子对象都消失时,自动删除父对象行
【发布时间】:2008-10-15 09:57:16
【问题描述】:

在 PostgreSQL 8.3 数据库中,我有“bookings”表按 ID 引用“booking_transactions”表。这样每个预订都属于一个单一的交易。可以从数据库中删除预订。

当引用它的所有“bookings”都消失时,如何确保自动删除“booking_transactions”行?

我怀疑 ON DELETE "bookings" 触发器不起作用,因为它必须查询 "bookings" 表的其他行。

【问题讨论】:

    标签: postgresql


    【解决方案1】:

    “预订”上的触发器应该可以工作,在触发器函数中查询表本身没有问题。

    【讨论】:

    • 是的,你是对的。我一定把它和 CHECK 的限制搞混了。
    【解决方案2】:

    下面的 plpgsql 触发器函数完成了这项工作

    BEGIN
    DELETE FROM
        booking_transactions bt
    WHERE
        bt.id = OLD.transaction_id AND
        NOT EXISTS (SELECT 1 FROM bookings b WHERE b.transaction_id = bt.id);
    
    RETURN OLD;
    END;
    

    必须在bookings'DELETE后执行

    【讨论】:

      猜你喜欢
      • 2018-12-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-11-25
      • 2021-07-23
      • 1970-01-01
      • 2021-06-06
      • 1970-01-01
      相关资源
      最近更新 更多