假设我有一个名为“ users”的表,如下所示:
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | 'Sid' | 'Barrett' |
| 2 | 'Roger' | 'Waters' |
| 3 | 'Richard' | 'Wright' |
| 4 | 'David' | 'Gilmour' |
| 5 | 'Nick' | 'Mason' |
+----+------------+-----------+
每个“用户”在与FK相同列名“ user_id”的多个表上具有大量引用。如果我需要删除一个元素,我相信过程是先删除关系(以避免“违反外键约束”错误),然后再删除“用户”表中的元素本身,对吗?
但是...是否有可能删除所有其他表上带有其所有引用的“ user”元素?我正在使用NodeJS(Express)并使用PostgreSQL。如果答案很明显,请道歉,我是SQL的新手。 非常感谢指教!!
是,使用外键上的on delete cascade
。
on delete cascade
现在删除用户时,所有与之相关的帖子也将被删除。
例如,如果帖子中有评论,此操作将会继续...
create table users (
id bigserial primary key
...
);
create table posts (
...
user_id bigint not null references users on delete cascade
...
)
[删除用户后,他们的帖子将被删除,这些帖子的评论也将被删除。这是“层叠”部分。