首页 > 解决方案 > MySQL在插入外键之前检查父子字段是否匹配

问题描述

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

例如,假设我有下表

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”匹配的子表值

标签: mysqlsql

解决方案


这称为外键约束。最好的方法是将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);

推荐阅读