1

尝试在表供应商上为供应商 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  

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

4

2 回答 2

1

外键必须引用唯一列。所以Supplier_ID列需要是唯一的。

但是,如果我正确理解您的意图,您似乎可能会倒退。它可能应该是 Payment 表中供应商 ID 上引用供应商表的外键。

于 2013-11-13T05:43:52.330 回答
-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)
);
于 2013-11-13T05:47:02.770 回答