gpt4 book ai didi

MySQL 在插入外键之前检查父子字段是否匹配

转载 作者:行者123 更新时间:2023-11-29 07:17:12 25 4
gpt4 key购买 nike

是否可以在子表中强制执行检查,其中字段必须与父表具有相同的值以允许插入外键?

例如,假设我有下表

Parent Table
-------------
id
field1
field7

Child Table
-------------
id
field1
field2
parent_id (foreign key to parent table column "id")
field3

如果子表和父表中的“field1”具有相同的值,我只想允许在子表中插入 parent_id。

我正在考虑在应用程序逻辑中处理这个约束,但我很好奇 MySQL 是否有办法强制执行此操作。

编辑:在这种情况下,子表与父表具有一对多的外键关系。子表列 parent_id 引用父表列 id。所以除此之外,我只想插入子表值,其中给定的子表“field1”值与给定的“parent_id”引用值“field1”匹配

最佳答案

这称为外键约束。最好的办法是定义父表中的id作为主键:

create table parent (
id <whatever type> primary key,
. . .
);

大多数数据库要求引用的键是主键或唯一键。尽管 MySQL 将此扩展到任何键(即任何具有索引的列),但请坚持使用主键/唯一键。

然后在子表中声明外键引用:

alter table child add constraint fk_child_parent
foreign key (parent_id) references parent (id);

编辑:

我认为跨表重复值不是一个好主意。最好在必要时查找它们。但是,您可以使用外键执行您想要的操作:

create table parent (
id <whatever type> primary key,
field1 . . .,
. . .
unique (field1, id)
);

alter table child add constraint fk_child_parent
foreign key (field1, parent_id) references parent (field1, id);

关于MySQL 在插入外键之前检查父子字段是否匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58575755/

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