2011-09-21 87 views
0

我一直在更改我所有的表来定义FK,并在尝试此表studentRsp时出现错误。外键错误

ALTER TABLE StudentRsp 
add CONSTRAINT fk_rspDate 
    FOREIGN KEY (rspDate) 
    REFERENCES LecturerRsp(rspDate); 

正在错误

错误消息:有在 引用表“LecturerRsp”外键“fk_rspDate”的引用列的列表 匹配没有主或候选键。无法创建约束。请参阅 以前的错误。

的rspDate在LecturerRsp定义为一个主键

+0

你说rspDate被定义为“主键”,这不太合理,因为每个表最多只有一个主键。我认为你的意思是说它被定义为主键的一部分,正确地解决问题的核心。 –

+0

我在我的表上有多个主键 – David

+0

如果你的主键由多个列组成,任何外键都必须引用**所有** PK中的那些列 - 不只是其中的一个 –

回答

0

寻找在你StudentRsp有不你LecturerRsp表存在的字段行。换句话说,约束要求在foriegn键列中的所有字段的一个字段中的主键列匹配,并且有在StudentRsp的密钥中不LecturerRsp

实施例存在:

LecturerRsp   StudentRsp 
pk_Col1    fk_Col1 
    1      1 
    2      2 
    3      4 
    4      5 *** 
0

错误消息是实际上可以很清楚的 - 只是读它...

*有在引用表上没有主或候选键 “LecturerRsp”的引用列的列表中外资 键匹配“fk_rspDate '。*

要引用你的表LecturerRsp和其列rspDate - 但此消息明确地告诉你:rspDate是不是该表的主键,也不是唯一索引/约束的一部分。

这两者中的任何一个都是您能够从外键引用该列的要求。

要解决这个问题:

  • 要么改变LecturerRsp主键是在列rspDate
  • 或者(如果可能的话),该列

创建唯一索引。如果你不能做这两件事中的任何一件,那么你不能从外键引用那一列。