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

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

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

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

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

mitkmikd

mitkmikd1#

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

  1. create table users (
  2. id bigserial primary key
  3. ...
  4. );
  5. create table posts (
  6. ...
  7. user_id bigint not null references users on delete cascade
  8. ...
  9. )

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

  1. create table comments (
  2. ...
  3. post_id biging not null references posts on delete cascade
  4. ...
  5. )

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

展开查看全部

相关问题