【发布时间】:2012-10-24 07:28:18
【问题描述】:
我正在使用 MySQL 数据库。我有两个表,表 1 和表 2。表 1 中有一个复合主键。表 2 中有一个复合外键,它引用了表 1 中的复合 PK。
我遇到的问题如下图所示:
表 1
|------------PK------------|
菜单ID |类别 ID |类别名称
1 |1 |myCategoryName1
1 |2 |myCategoryName2
2 |1 |myCategoryName3
2 |2 |myCategoryName4
2 |3 |myCategoryName5
我可以在表 2 中创建一个引用表 1 中的错误条目的条目:
表 2
|------------FK------------| |----PK----|
菜单 |类别 ID | postid |帖子名称
1 |3 |1 |myPostName
现在,这不是什么大问题,因为我可以将有效值插入数据库。但是,这似乎是数据库中的一个关系错误,我希望拥有一个干净、功能正常的数据库。有没有办法纠正这个小问题?
更新: 我使用 phpMyAdmin 来实现我的数据库,显然没有办法在 phpMyAdmin 中实现复合外键。我能够通过
查看我错误实现的外键SHOW CREATE TABLE Table2
其中Table2 是我的第二个具有复合外键的表的名称。
然后我通过手动正确添加复合外键
ALTER TABLE Table2 ADD CONSTRAINT my_fk_constraint
FOREIGN KEY (menuid, categoryid)
REFERENCES Table1(menuid, categoryid)
其中my_fk_constraint 是要添加的约束的名称。
注意:以这种方式手动添加外键约束不允许您在插入新条目时使用下拉菜单(也不能通过单击 FK 列来引用相应的表),如你通常可以在 phpMyAdmin 中。
感谢pst 和thedayofcondor,你们都说对了,因为我是个使用phpMyAdmin 的小混混。
【问题讨论】:
-
确保使用了适当的关系感知支持(即 InnoDB,但不是 MyISAM)。此外,这些 FK 是否是通过 DML 定义的(或者它们只是合乎逻辑的)?如果有,怎么做?
标签: foreign-keys key foreign-key-relationship composite-key