创建触发器以删除记录

时间:2012-11-06 22:08:52

标签: sql postgresql triggers

我有一张桌子可以叫甲板。 Decks使用id作为其主键以及其他一些属性。 cards表包含对deck ID的外键引用,并且还具有cardid的主键。另一个表称为答案,其外键是cardid。

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

我想创建一个触发器来处理第一次和第二次删除,这样我只需要从decks表中指定一个delete语句来完全破坏一个套牌。

下面是我发现的一个示例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();

如果有人知道这样做,如果他们能够朝着正确的方向推动我,或者提供一个如何做到这一点的例子,我将不胜感激!

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

在您的foreign key定义中使用ON DELETE CASCADE,它将为您解决此问题