我正在使用MySQL数据库 . 我有两个表,表1和表2.表1中有一个复合主键 . 表2中有一个复合外键,它引用表1中的复合PK .
我遇到的问题如下图所示:
表格1
| ------------ ----------- PK |
menuid | categoryid |分类名称
1 | 1 | myCategoryName1
1 | 2 | myCategoryName2
2 | 1 | myCategoryName3
2 | 2 | myCategoryName4
2 | 3 | myCategoryName5
我可以在表2中创建一个引用表1中的错误条目的条目:
表2
| FK ------------ ----------- | | ---- ---- PK |
menuid | categoryid | postid |发布名称
1 | 3 | 1 | myPostName
现在,这不是一个大问题,因为我可以将有效值插入数据库 . 但是,这似乎是数据库中的关系错误,我希望有一个干净,功能正常的数据库 . 有没有办法纠正这个小问题?
UPDATE: 我使用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
是要添加的约束的名称 .
Note: 以这种方式手动添加外键约束不允许您在插入新条目时使用下拉菜单(也不能通过单击FK列来引用相应的表),就像在phpMyAdmin中一样 .
谢谢 pst
和 thedayofcondor
,你们都是正确的,因为我是一个使用phpMyAdmin的小恶魔 .
1 回答
正确:不,防止:是的!
如果正确设置约束,则不应该发生这种情况:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html