如何删除PostgreSQL中具有有效引用键的行

时间:2014-02-12 09:18:00

标签: sql postgresql delete-row

我的数据库中有两个名为useraccount的表。 user表有一个名为account_id的外键列,该列绑定到表id的{​​{1}}列。

更具体地说,简化的数据库结构如下:

account

我想知道是否可以删除一行表CREATE TABLE account ( id INTEGER PRIMARY KEY, name VARCHAR NOT NULL UNIQUE ); CREATE TABLE "user" ( id INTEGER PRIMARY KEY, login VARCHAR NOT NULL UNIQUE, pass VARCHAR NOT NULL, account_id INTEGER NOT NULL, CONSTRAINT account_fk FOREIGN KEY (account_id) REFERENCES account (id) ON DELETE CASCADE ON UPDATE CASCADE NOT DEFERRABLE ); 而不删除特定记录引用的user

每当我尝试删除account时,表account中的相关行也会被删除(由于user子句)。但是,我也需要在另一个方向发生同样的一系列事件。

1 个答案:

答案 0 :(得分:1)

使用触发器

CREATE OR REPLACE FUNCTION delete_account() RETURNS trigger AS
$$
BEGIN
    DELETE FROM account WHERE id = OLD.account_id;
END
$$
LANGUAGE 'plpgsql' VOLATILE;

CREATE TRIGGER trig_delete_account
  AFTER DELETE ON "user"
    FOR EACH ROW
EXECUTE PROCEDURE delete_account();

但请记住,其他引用同一帐户的用户也会被删除。您可能具有一对一关系,并且需要user.account_id上的唯一键来强制执行该操作。