我有一个使用MySQL 2005的数据库。我有两个表,注册和AlertMsg。
注册的主键有两列: UnitCode和StudentID。这两列都是另一个表的外键。
AlertMsg的主键有三列: UnitCode、StudentID和AlertNo。
当我尝试在AlertMsg表中使用UnitCode创建一个外键时,如下所示:
ALTER TABLE AlertMsg
ADD FOREIGN KEY (UnitCode)
REFERENCES Enrolment(UnitCode)我得到以下错误:
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方面有点新手,所以我假设如果表定义的最左边的列中有一个键,这意味着它是表的主键。
有人能帮上忙吗?提前谢谢。
发布于 2011-09-26 00:08:39
用于注册的主键有两列: UnitCode
StudentID。这两列都是另一个表的外键。
AlertMsg的主键有三列: UnitCode、StudentID和AlertNo。
你说“主键用于...”。实际上,它可能不是多个键,而是使用多个列创建的一个键。这些列在您的表中需要是唯一的,因此您不能只引用外键中的一列。
如果您希望此语句起作用
ALTER TABLE AlertMsg
ADD FOREIGN KEY (UnitCode)
REFERENCES Enrolment(UnitCode)表Enrolment的UnitCode中的值需要是唯一的,并且您需要在该列上添加唯一约束。我想情况并非如此,所以您不能添加必要的唯一约束。
您可能应该使用下面的代码:
ALTER TABLE AlertMsg
ADD FOREIGN KEY (UnitCode, StudentID)
REFERENCES Enrolment(UnitCode, StudentID)发布于 2011-09-25 23:48:11
标准主键不必是表中最左边的索引列,定义表的开发人员和DBA通常将主键列放在第一位。
在标准SQL中,外键必须引用:
在被引用表中定义为PRIMARY KEY或UNIQUE KEY的
我怀疑您真的在使用Microsoft SQL Server2005,而不是MySQL。没有被称为"MySQL 2005“的产品版本。
发布于 2011-09-25 23:55:50
您可以尝试:
Hth。
https://stackoverflow.com/questions/7546539
复制相似问题