【问题标题】:MySQL One-To-Many Foreign Key strategyMySQL 一对多外键策略
【发布时间】:2015-03-15 22:47:26
【问题描述】:

我有一张桌子:

实例

PK 称为 'id' (int autoincrement)

还有另外两个表:

values_text

values_int

这两个表有这些字段:

instance_id / 代码 / 价值

通过 instance_idcode 进行 PK。

instance的一条记录在values_textvalues_int中可以有0条、1条或多条相关记录。

我想将实例中的外键添加到 values_int 和 values_text,这样当我从 instances 中删除记录时,相关记录也会从 values_text 中删除values_int.

我能够创建外键,问题是我无法在 instance 表中创建记录,因为我收到错误:

无法添加或更新子行:外键约束失败(instances, CONSTRAINT instances_fk_ab43df FOREIGN KEY (id) REFERENCES values_text (instance_id))

如何正确设置外键?

【问题讨论】:

    标签: mysql database


    【解决方案1】:

    您已经创建了PK/FK,反之亦然,实际上您的外键是instance_id(在values_textvalues_text 表中)而不是idinstances 中。

    instances 中删除id 上的外键约束,而不是在instance_id (在values_textvalues_text 表中)上设置外键约束,并在instances 中保留id作为主键。

    【讨论】:

    • 但是如果我将 FK 添加到 values_text 中,当我删除实例中的记录时,我无法删除 CASCADE 上的 values_text 记录。我不明白是否需要在实例表或 values_* 上设置 FK。
    猜你喜欢
    • 1970-01-01
    • 2012-09-04
    • 1970-01-01
    • 2014-06-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-04
    • 1970-01-01
    相关资源
    最近更新 更多