gpt4 book ai didi

sql - 如何级联删除 PostgreSQL 中的多列

转载 作者:行者123 更新时间:2023-11-29 13:45:10 26 4
gpt4 key购买 nike

假设我有一个表user_item,用于记录用户和他们的项目关系,如下所示。

create table user_item (
user_id varchar(255),
iterm_id varchar(255),
CONSTRAINT pk_user_item PRIMARY KEY(user_id,iterm_id)
);


| user_id | iterm_id |
|--------- |---------- |
| user123 | item123 |

同时用户可以将他们的项目分组到一个标签中,所以我们有另一个表 user_item_tag

| user_id   | iterm_id  | tag_id    |
|--------- |---------- |-------- |
| user123 | item123 | tag123 |

现在我的问题是,当我为用户删除一个项目时,相关记录应该同时从表 user_item_tag 中删除,我注意到级联删除可能对我的情况有帮助,但是当我尝试遵循 SQL

create table user_item_tag (
user_id varchar(255),
item_id varchar(255) references user_item (iterm_id) on delete cascade,
tag_id varchar(255),
CONSTRAINT pk_user_item_tag PRIMARY KEY(user_id, item_id, tag_id)
);

提示

ERROR: there is no unique constraint matching given keys for referenced table "user_item"

即使在我将 references user_item (user_id) on delete cascade 添加到表 user_item_taguser_id 列后,它也无法工作。

我走错路了吗?或者我的问题有更好的解决方案吗?非常感谢。

最佳答案

外键必须指向唯一约束。否则 PostgreSQL 怎么知道条目属于父表中的哪一行?

所以你必须写:

CREATE TABLE user_item_tag (
user_id varchar(255),
item_id varchar(255),
tag_id varchar(255),
CONSTRAINT pk_user_item_tag PRIMARY KEY(user_id, item_id, tag_id),
FOREIGN KEY (user_id, item_id)
REFERENCES user_item (user_id, iterm_id) ON DELETE CASCADE
);

旁注:varchar(255) 对于索引键来说是 long。

关于sql - 如何级联删除 PostgreSQL 中的多列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49744591/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com