postgresql:删除一行及其在其他表中的所有引用(fk)?

mu0hgdu0  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(302)

假设我有一个名为“users”的表,如下所示:

+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1  | 'Sid'      | 'Barrett' |
| 2  | 'Roger'    | 'Waters'  |
| 3  | 'Richard'  | 'Wright'  |
| 4  | 'David'    | 'Gilmour' |
| 5  | 'Nick'     | 'Mason'   |
+----+------------+-----------+

每个“user”在多个表上有许多引用,这些表的列名“user\u id”与fk相同。
如果我需要删除一个元素,我相信这个过程是先删除关系(以避免“违反外键约束”错误),然后删除“users”表中的元素本身,对吗?
但是。。。是否有可能删除“user”元素及其在所有其他表上的所有引用?
我正在使用nodejs(express)和postgresql。如果答案很明显,请道歉,我是sql的新手。
非常感谢您的建议!!

mitkmikd

mitkmikd1#

是的,使用 on delete cascade 在外键上。

create table users (
  id bigserial primary key
  ...
);

create table posts (
  ...
  user_id bigint not null references users on delete cascade
  ...
)

现在当一个用户被删除时,他们所有相关的帖子也会被删除。
这将继续下去,例如,如果一个帖子有评论。。。

create table comments (
  ...
  post_id biging not null references posts on delete cascade
  ...
)

当用户被删除时,他们的帖子将被删除,这些帖子的评论也将被删除。这就是“层叠”部分。

相关问题