gpt4 book ai didi

sql - postgresql 和 Delete 语句违反外键约束

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

我的删除语句有问题。

我有两个表:

table vehicule_loan(
vehicule TEXT NOT NULL UNIQUE,
);

table vehicule_uid (
id UUID NOT NULL DEFAULT uuid_generate_v4(),
vehicule TEXT NOT NULL REFERENCES vehicule_loan(vehicule) ON DELETE NO ACTION
);

当我从表 vehicule_loan 中删除一个 vehicule 时,我希望保留表 vehicule_uid 中的引用行。

但是当我尝试删除一个时,我得到了这个错误:

ERROR:  update or delete on table "vehicule_loan" violates foreign key constraint "vehicule_uid_vehicule_fkey" on table "vehicule_uid"

我想我理解错误:从表 vehicule_loan 中删除一个 vehicule 后,vehicule_uid 中的 vehicule 将指向任何内容。

但是有没有办法将行保留在 vehicule_uid 中?

最佳答案

您应该允许外键属性中有 NULL 值,并将外键约束定义为 ON DELETE SET NULL

我引用章节5.3. Constraints from the PostgreSQL manual :

There are two other options: SET NULL and SET DEFAULT. These cause the referencing columns to be set to nulls or default values, respectively, when the referenced row is deleted.

可能看起来像这样:

table vehicule_uid (
id uuid NOT NULL DEFAULT uuid_generate_v4(),
vehicule text REFERENCES vehicule_loan(vehicule) ON DELETE SET NULL
);

使用此设置,当您删除 vehicule_loan 中的行时,vehicule_uid 中的所有引用行都保留在数据库中。

关于sql - postgresql 和 Delete 语句违反外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9150743/

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