首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL -无法将外键添加到表中

问MySQL -无法将外键添加到表中
EN

Stack Overflow用户
提问于 2011-09-25 23:36:15
回答 3查看 486关注 0票数 0

我有一个使用MySQL 2005的数据库。我有两个表,注册和AlertMsg。

注册的主键有两列: UnitCode和StudentID。这两列都是另一个表的外键。

AlertMsg的主键有三列: UnitCode、StudentID和AlertNo。

当我尝试在AlertMsg表中使用UnitCode创建一个外键时,如下所示:

代码语言:javascript
复制
ALTER TABLE AlertMsg
ADD FOREIGN KEY (UnitCode)
REFERENCES Enrolment(UnitCode)

我得到以下错误:

代码语言:javascript
复制
SQL Execution Error.

Executed SQL statement: ALTER TABLE AlertMsg

ADD FOREIGN KEY (UnitCode)
REFERENCES Enrolment (UnitCode)
Error Source: .Net SqlClient Data Provider
Error Message: There are no primary or candidate keys in the referenced table 'Enrolment' that match the referencing column list in the foreign key 'FK_AlertMsg_UnitCo_571DF1D5'.
Could not create constraint. See previous errors.

经过一些搜索,似乎这是因为UnitCode不是注册的主键。但注册表的定义似乎表明它是这样的。我在SQL方面有点新手,所以我假设如果表定义的最左边的列中有一个键,这意味着它是表的主键。

有人能帮上忙吗?提前谢谢。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-09-26 00:08:39

用于注册的主键有两列: UnitCode

StudentID。这两列都是另一个表的外键。

AlertMsg的主键有三列: UnitCode、StudentID和AlertNo。

你说“主键用于...”。实际上,它可能不是多个键,而是使用多个列创建的一个键。这些列在您的表中需要是唯一的,因此您不能只引用外键中的一列。

如果您希望此语句起作用

代码语言:javascript
复制
ALTER TABLE AlertMsg
ADD FOREIGN KEY (UnitCode)
REFERENCES Enrolment(UnitCode)

表Enrolment的UnitCode中的值需要是唯一的,并且您需要在该列上添加唯一约束。我想情况并非如此,所以您不能添加必要的唯一约束。

您可能应该使用下面的代码:

代码语言:javascript
复制
ALTER TABLE AlertMsg
ADD FOREIGN KEY (UnitCode, StudentID)
REFERENCES Enrolment(UnitCode, StudentID)
票数 1
EN

Stack Overflow用户

发布于 2011-09-25 23:48:11

标准主键不必是表中最左边的索引列,定义表的开发人员和DBA通常将主键列放在第一位。

在标准SQL中,外键必须引用:

在被引用表中定义为PRIMARY KEY或UNIQUE KEY的

  • 列。

  • 外键中的列不必具有相同的名称,但它们在编号、顺序和数据类型上必须相同。

我怀疑您真的在使用Microsoft SQL Server2005,而不是MySQL。没有被称为"MySQL 2005“的产品版本。

票数 0
EN

Stack Overflow用户

发布于 2011-09-25 23:55:50

您可以尝试:

  • 将外键约束添加到注册表的2列(UnitCode,StudentID)。或者,如果您只需要注册表( UnitCode )列上的引用,则
  • 将唯一约束添加到注册表的(UnitCode)列。

Hth。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7546539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档