Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql 外键错误_Sql_Database_Foreign Keys_Foreign Key Relationship_Alter - Fatal编程技术网

Sql 外键错误

Sql 外键错误,sql,database,foreign-keys,foreign-key-relationship,alter,Sql,Database,Foreign Keys,Foreign Key Relationship,Alter,我一直在修改我的所有表以定义FK,在尝试此表studentRsp时出现错误 ALTER TABLE StudentRsp add CONSTRAINT fk_rspDate FOREIGN KEY (rspDate) REFERENCES LecturerRsp(rspDate); 我得到了错误 错误消息:中没有主键或候选键 与引用列列表匹配的引用表'讲师errsp' 在外键“fku rspDate”中。无法创建约束。看见 以前的错误 rspDate定义为讲师ERRSP中的主键。查找S

我一直在修改我的所有表以定义FK,在尝试此表studentRsp时出现错误

ALTER TABLE StudentRsp
add CONSTRAINT fk_rspDate
  FOREIGN KEY (rspDate)
  REFERENCES LecturerRsp(rspDate);
我得到了错误

错误消息:中没有主键或候选键 与引用列列表匹配的引用表'讲师errsp' 在外键“fku rspDate”中。无法创建约束。看见 以前的错误


rspDate定义为讲师ERRSP中的主键。查找StudentRsp中包含讲师ERRSP表中不存在字段的行。换句话说,该约束要求外键列中的所有字段与主键列中的字段匹配,并且StudentRsp中有一个在讲师RSP中不存在的键

例如:

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

错误信息非常清楚-只要阅读它

*引用的表中没有主键或候选键 与外文中的引用列列表匹配的“讲师errsp” 键“fk_r更新”*

您希望引用表及其列
rspDate
,但此消息清楚地告诉您:
rspDate
不是该表上的主键,也不是唯一索引/约束的一部分

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

要解决此问题,请执行以下操作:

  • 讲师errsp
    上的主键更改为列
    rspDate
  • 或者(如果可能)在该列上创建唯一索引

如果您不能执行这两项操作中的任何一项,那么您就不能从外键引用该列。

您说过rspDate被定义为“主键”,这没有什么意义,因为每个表最多有一个主键。我想你的意思是说,它被定义为主键的一部分,这直接关系到问题的核心。我的表上有多个主键。如果主键由多列组成,任何外键都必须引用PK中的所有列,而不仅仅是其中一列