gpt4 book ai didi

mysql - 如何在没有外键的情况下建立两个表之间的关系

转载 作者:行者123 更新时间:2023-11-29 08:31:28 25 4
gpt4 key购买 nike

我是个新手,我正在尝试使用 xampp for linux 1.8.1 制作一个 mysql 数据库。

我想在两个表 A 和 B 之间建立关系。据我所知,外键创建双射或一对一关系。我肯定没有这么严格的关系,所以我只在表A中创建了一个列来存储表B的id。

这是正确的吗?就没有办法强制执行吗?我的意思是,这样您就可以删除表 A 中引用的表 B 的一行。 您可以在 A 中存储一个与 B 中任何行的 id 都不对应的值.如何防止这种情况发生?

最佳答案

The main problem for me is to prevent deletion of a row of table B if the row id is referenced by a row of table A.

create table table_b (
b_id integer primary key
);

create table table_a (
b_id integer primary key references table_b (b_id)
);

insert into table_b values (1);
insert into table_a values (1);

以下语句将失败。

delete from table_b where b_id = 1;

如果您使用 PostgreSQL 构建它,错误消息会显示

ERROR: update or delete on table "table_b" violates foreign key constraint "table_a_b_id_fkey" on table "table_a" Detail: Key (b_id)=(1) is still referenced from table "table_a".

该结构为您提供了两个表之间的“1 到 0 或 1”关系。对于“1 到 0 或多”,向 table_a 的主键添加一列或多列。

create table table_b (
b_id integer primary key
);

create table table_a (
b_id integer references table_b (b_id),
checkout_date date not null default current_date,
primary key (b_id, checkout_date)
);

该结构将让 table_a 为 b_id 的一个值存储多行,但每一行都必须具有不同的 checkout_date。

关于mysql - 如何在没有外键的情况下建立两个表之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16478535/

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