外键错误1215

时间:2013-11-13 05:40:22

标签: mysql relational-database

尝试在供应商for Supplier_ID引用表付款的表上创建外键。

CREATE TABLE Payment (
Supplier_ID INT (4) NOT NULL,
Date DATE NOT NULL,
Amount INT (4), 
Payment_ID INT (4) NOT NULL,
PRIMARY KEY (Payment_ID, Supplier_ID)
);
Query OK, 0 rows affected (0.10 sec)

CREATE TABLE Supplier (
Supplier_ID INT(4) NOT NULL,    
Name VARCHAR(4) NOT NULL,
Country VARCHAR(4) NOT NULL,
Reliability_Score INT(4),
Contact_Info VARCHAR(4), 
PRIMARY KEY (Supplier_ID)
FOREIGN KEY (Supplier_ID) REFERENCES Payment(Supplier_ID) 
);
ERROR 1215 (HY000): Cannot add foreign key constraint  

如果我能提供更多信息,请告知我们,谢谢。

2 个答案:

答案 0 :(得分:1)

外键必须引用唯一列。因此Supplier_ID列必须是唯一的。

然而,如果我正确理解你的意图,你似乎可能会落后。它应该是引用供应商表的Payment表中supplier_ID的外键。

答案 1 :(得分:-2)

在关系数据库的上下文中,外键是一个表中的字段(或字段集合),用于唯一标识另一个表的行。换句话说,外键是列或列的组合,用于在两个表中的数据之间建立和实施链接。

你的代码中的

你已经将主键声明为PRIMARY KEY (Payment_ID, Supplier_ID)这是两列的组合,这是完全正常的但是在创建外键FOREIGN KEY (Supplier_ID) REFERENCES Payment(Supplier_ID)时你将一列引用到两列的组合中是错的

请在此处阅读http://en.wikipedia.org/wiki/Foreign_Key

现在是您的解决方案: 首先创建供应商表

CREATE TABLE Supplier (
Supplier_ID INT(4) NOT NULL,    
Name VARCHAR(4) NOT NULL,
Country VARCHAR(4) NOT NULL,
Reliability_Score INT(4),
Contact_Info VARCHAR(4), 
PRIMARY KEY (Supplier_ID)
);

现在是付款表

CREATE TABLE Payment (
Supplier_ID INT (4) NOT NULL,
Date DATE NOT NULL,
Amount INT (4), 
Payment_ID INT (4) NOT NULL,
PRIMARY KEY (Payment_ID, Supplier_ID),
FOREIGN KEY (Supplier_ID) REFERENCES Supplier(Supplier_ID)
);