是否可以在子表中强制执行检查,其中字段必须与父表具有相同的值以允许插入外键?
例如,假设我有下表
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/