0

我有一张桌子,我们可以称之为甲板。甲板有一个 id 用作其主键以及其他一些属性。卡片表包含一个对卡片组 ID 的外键引用,并且还有一个主键 cardid。存在另一个名为 answers 的表,其中它的外键是 cardid。

因此,为了从套牌中删除,数据库要求我先从答案中删除,然后是卡片,最后从套牌中删除。

我想创建一个触发器来处理第一次和第二次删除,这样我只需要从卡组表中指定一个删除语句即可完全销毁卡组。

下面是我找到的一个示例 PostgreSQL 触发器,但我不确定它是否可以做我所要求的,因为我无法在网上找到任何人以这种方式创建触发器的示例。

CREATE OR REPLACE FUNCTION autoCalculate() RETURNS TRIGGER AS $$
        BEGIN

        IF NEW.wins < 0 THEN
                RAISE EXCEPTION 'Wins cannot be negative';
        END IF;

        IF(OLD.wins <> NEW.wins_ OR (OLD.losses <> NEW.losses) THEN
                NEW.Winning_Percentage := calc_winning_percentage(NEW.Wins, NEW.Losses);
        END IF

        RETURN NEW;
        END;
$$ LANGUAGE plpgsql;

DROP TRIGGER update_winning_percentage ON standings;
CREATE TRIGGER update_winning_percentage BEFORE INSERT OR UPDATE ON standings
FOR EACH ROW EXECUTE PROCEDURE autoCalculate();

如果有人知道这样做,如果他们可以将我推向正确的方向或提供如何做到这一点的示例,我将不胜感激!

4

2 回答 2

0

在 Postgres 8.2 中,您可以指定On Delete Casacde何时定义外键关系。

http://www.postgresql.org/docs/8.2/static/ddl-constraints.html

于 2012-11-06T22:18:21.583 回答
0

在您的外键定义上使用 ON DELETE CASCADE ,它会为您解决这个问题

于 2012-11-06T22:19:52.223 回答