PostgreSQL:删除一行及其所有存在于其他表中的引用(FK)?
PostgreSQL: Delete a row and all of it's references (FK) existing in others tables?
假设我有一个名为 "users" 的 table,如下所示:
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | 'Sid' | 'Barrett' |
| 2 | 'Roger' | 'Waters' |
| 3 | 'Richard' | 'Wright' |
| 4 | 'David' | 'Gilmour' |
| 5 | 'Nick' | 'Mason' |
+----+------------+-----------+
每个 "user" 都有很多关于几个 table 的引用,它们具有与 FK 相同的列名 "user_id"。
如果我需要删除一个元素,我相信程序是先删除关系(以避免 "violates foreign key constraint" 错误),然后是 "users" table 中的元素本身,对吗?
但是...是否有可能删除一个 "user" 元素及其对所有其他 table 的所有引用?
我正在使用 NodeJS (Express) 并使用 PostgreSQL。
如果答案很明显,请道歉,我是 SQL 的新手。
非常感谢指教!!
是的,在外键上使用 on delete cascade
。
create table users (
id bigserial primary key
...
);
create table posts (
...
user_id bigint not null references users on delete cascade
...
)
现在,当用户被删除时,其所有关联的 post 也将被删除。
这将继续,例如,如果 post 有评论...
create table comments (
...
post_id biging not null references posts on delete cascade
...
)
当用户被删除时,他们的 posts 将被删除,那些 posts 的评论将被删除。那是 "cascade" 部分。
假设我有一个名为 "users" 的 table,如下所示:
+----+------------+-----------+
| id | first_name | last_name |
+----+------------+-----------+
| 1 | 'Sid' | 'Barrett' |
| 2 | 'Roger' | 'Waters' |
| 3 | 'Richard' | 'Wright' |
| 4 | 'David' | 'Gilmour' |
| 5 | 'Nick' | 'Mason' |
+----+------------+-----------+
每个 "user" 都有很多关于几个 table 的引用,它们具有与 FK 相同的列名 "user_id"。
如果我需要删除一个元素,我相信程序是先删除关系(以避免 "violates foreign key constraint" 错误),然后是 "users" table 中的元素本身,对吗?
但是...是否有可能删除一个 "user" 元素及其对所有其他 table 的所有引用?
我正在使用 NodeJS (Express) 并使用 PostgreSQL。
如果答案很明显,请道歉,我是 SQL 的新手。
非常感谢指教!!
是的,在外键上使用 on delete cascade
。
create table users (
id bigserial primary key
...
);
create table posts (
...
user_id bigint not null references users on delete cascade
...
)
现在,当用户被删除时,其所有关联的 post 也将被删除。
这将继续,例如,如果 post 有评论...
create table comments (
...
post_id biging not null references posts on delete cascade
...
)
当用户被删除时,他们的 posts 将被删除,那些 posts 的评论将被删除。那是 "cascade" 部分。