我使用的是MySQL数据库。我有两张桌子,一张桌子和二张桌子。表1中有一个复合主键。表2中有一个复合外键,它引用了表1中的复合主键。
我遇到的问题如下所示:
表1
|------------PK-----------|
menuid
我可以在表2中创建一个引用表1中一个错误条目的条目:
表2
|------------FK-----------|
现在,这不是一个大问题,因为我可以将有效值插入数据库。然而,这似乎是数据库中的一个关系错误,我希望有一个干净的、功能正确的数据库。有没有办法纠正这个小问题?
更新:我使用phpMyAdmin来实现我的数据库,显然在phpMyAdmin中没有实现复合外键的方法。我可以通过
SHOW CREATE TABLE TABLE 2
其中Table2
是带有复合外键的第二个表的名称。
然后我通过
ALTER TABLE 2 ADD CONSTRAINT my\u fk\u CONSTRAINT
外键(menuid,categoryid)
引用表1(menuid,categoryid)
其中my_fk_constraint
是要添加的约束的名称。
注意:以这种方式手动添加外键约束不允许您在插入新条目时使用下拉菜单(也不允许通过单击FK列引用相应的表),因为您通常可以在phpMyAdmin中这样做。
感谢pst
和thedayofcondor
,你们都是正确的,因为我是一个使用phpMyAdmin的小鸡巴怪胎。
正确:否,防止:是!
如果您正确设置了约束,则不应该发生这种情况:http://dev.mysql.com/doc/refman/5.5/en/innodb-foreign-key-constraints.html
问题内容: 如何使用复合主键作为外键?看来我的尝试无效。 问题答案: 该行: 是错的。您不能那样使用,这只是父表中PK约束的名称。要将复合主键用作外键,您必须向子表中添加相同数量(组成PK)的相同数据类型的列,然后在定义中使用这些列的组合:
如何将复合主键用作外键?看来我的尝试没有成功。
问题内容: 我试图用来向没有定义主键的表中插入数据。 但是事实是该表的两个字段一起在表中是唯一的。我如何使用hibernate注释实现相同的目的? 这是我的代码。 问题答案: 您可以使用和创建复合键,并将其与您的实体进行映射。例如: 然后在Java代码中使用常规方式来持久化实体。 参考:http : //docs.jboss.org/hibernate/annotations/3.5/refere
我发现很难创建复合外键。我想要一个会话表,它同时具有'movieid'和'cinemaid'作为复合外键。这是因为一个会话需要电影和电影院位置。 我当前的模式如下所示: Schema::create('session',函数(Blueprint$表){ }); 关于如何在laravel中创建复合外键,我找不到太多信息。我发现的最好的事情是: http://www.geexie.com/compos
问题内容: 如何创建外键 从表tGeoAnswers列’locationId’ 表tLocations列“ ID”? 我正在尝试找到的这段代码,但出现以下错误: “ FK_Answer_Location”列的定义必须包含数据类型 问题答案: 否则,假设您要添加名为的列。
我想在用户表中添加一个外键: 一个用户有一个城镇(法语为ville),一个城镇可以有多个用户: 我的村庄(城镇)迁移 我重命名了迁移(我不知道这样做是否有好处?),这是我迁移的顺序,正如您所看到的,我在用户之前创建了villes: 我在终端中发现了这个错误: 照亮\数据库\查询异常 SQLSTATE[42000]:语法错误或访问冲突:1072键列“villes\u id”在表中不存在(SQL:al