我的数据库中有两个名为user
和account
的表。 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
子句)。但是,我也需要在另一个方向发生同样的一系列事件。
答案 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上的唯一键来强制执行该操作。