使用 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 条目(相关 id
和 c_id
)"using last_insert_id();
" 以提取 id
和 c_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:
- Add Foreign Key to existing table
- http://dev.mysql.com/doc/refman/5.0/en/alter-table.html
我的数据库中有三个选项卡:
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 条目(相关 id
和 c_id
)"using last_insert_id();
" 以提取 id
和 c_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:
- Add Foreign Key to existing table
- http://dev.mysql.com/doc/refman/5.0/en/alter-table.html