使用 php mysqli 实现参照完整性

implementing referntial integrity with php mysqli

我的数据库中有三个选项卡:

1.pers_info(id(primary), name ,....)
2.contacts(c_id(primary), phone, email, ...)

现在 1 个人可以在联系人选项卡中拥有多行。 因此,为了尽量减少冗余,我制作了另一个标签 contact_relation(id (foregin key references pers_info(id), c_id (foregin key references contacts(c_id))

我成功地创建了关系并且还能够向其中插入 apt 条目(相关 idc_id)"using last_insert_id();" 以提取 idc_id 必填。

现在的问题..

我删除了选项卡 contacts_rel。并以这种方式创建它:

CREATE TABLE contacts_relation (
    id INT NOT NULL,
    cid INT NOT NULL,

    FOREIGN KEY (id)
      REFERENCES pers_info(id)
      ON UPDATE CASCADE ON DELETE RESTRICT,

    FOREIGN KEY (c_id)
      REFERENCES contacts(c_id)
);

如果我现在尝试插入选项卡 cont_rel,它会出错: 无法添加或更新子行外键约束失败。 有道理..

我希望在选项卡 cont_rel 的定义中添加约束可以省去使用“last_insert_id();

手动插入条目的麻烦

so is there a way, i could maintain ref integrity with new data coming.. thanks.

为什么是第三个 table?当你有多对多关系时,你需要中间 table。您有一对多关系,所以两个 table 就足够了。 Table 联系人需要 FK 到 table pers_info。如果您还没有,请添加它。

这是一个简单的交易示例 LAST_INSERT_ID()SQL INSERT INTO multiple tables

关于外键和修改的一些信息table: