2

我正在使用 MySQL 数据库。我有两个表,表 1 和表 2。表 1 中有一个复合主键。表 2 中有一个复合外键,它引用了表 1 中的复合 PK。

我遇到的问题如下图所示:

表一
|------------PK------------|
菜单| 类别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 中那样。

谢谢pstthedayofcondor你们都是正确的,因为我是一个使用 phpMyAdmin 的小家伙。

4

1 回答 1

1

正确:不,防止:是!

如果您正确设置约束,则不会发生这种情况:http: //dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html

于 2012-11-04T02:45:26.063 回答