我有一张桌子可以叫甲板。 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();
如果有人知道这样做,如果他们能够朝着正确的方向推动我,或者提供一个如何做到这一点的例子,我将不胜感激!
答案 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,它将为您解决此问题