无法添加外键约束错误:

时间:2016-09-01 08:10:39

标签: mysql sql database foreign-keys

我无法理解为什么mysql workbench显示为什么 无法添加外键约束错误: 该错误显示在Sales_Order和Purchase_Order表中。我无法弄清楚可能是什么问题。我已经创建了Er-diagram但无法在sql workbench中运行。

/ *删除现有表格* /

DROP TABLE IF EXISTS Sales_Order; 
DROP TABLE IF EXISTS Purchase_Order; 
DROP TABLE IF EXISTS Supplier;
DROP TABLE IF EXISTS Book; 
DROP TABLE IF EXISTS Customer; 

/* Creating the full sets of Table */

/*Customer Table*/
CREATE TABLE Customer(
Customer_ID INTEGER NOT NULL, 
Customer_Name VARCHAR(255) NOT NULL, 
Customer_Address VARCHAR(255) NOT NULL, 
Customer_Purchase VARCHAR(50) NOT NULL,
Customer_Phone VARCHAR(100) NOT NULL,
CONSTRAINT PKCustomer_ID PRIMARY KEY (Customer_ID)
);

/*Book Table*/
CREATE TABLE Book(
Book_ID  INTEGER NOT NULL,
Book_Name VARCHAR(255) NOT NULL, 
Book_Qty INTEGER NOT NULL, 
Book_Price DECIMAL NOT NULL, 
Book_Author VARCHAR(255) NOT NULL, 
Book_Publisher VARCHAR(255) NOT NULL,
CONSTRAINT PKBook_ID PRIMARY KEY(Book_ID)
);





/*Supplier Table*/
CREATE TABLE Supplier(
Supplier_ID INTEGER NOT NULL,
Supplier_Name VARCHAR(255) NOT NULL, 
Supplier_Address VARCHAR(255) NOT NULL,
CONSTRAINT PKSupplier_ID PRIMARY KEY (Supplier_ID)
); 



/*Sales_Order Table*/
CREATE TABLE Sales_Order(
Sales_ID INTEGER NOT NULL,
Sales_Date INTEGER(20) NOT NULL, 
Sale_Qty INTEGER NOT NULL, 
Discount INTEGER NOT NULL,
CONSTRAINT PKSales_ID PRIMARY KEY (Sales_ID),
CONSTRAINT FKSales_ID FOREIGN KEY (Sales_ID) REFERENCES Customer(Customer_ID),
CONSTRAINT FKSales_ID FOREIGN KEY (Sales_ID) REFERENCES Book(Book_ID)
);

/*Purchase_Table Table*/
CREATE TABLE Purchase_Order(
Purchase_Order_ID INTEGER NOT NULL,
Purchase_Date INTEGER NOT NULL,
Purchase_Description VARCHAR(255) NOT NULL,
Purchase_Qty INTEGER NOT NULL, 
CONSTRAINT PKPurchase_Order_ID PRIMARY KEY (Purchase_Order_ID),
CONSTRAINT FKPurchase_Order_ID FOREIGN KEY(Purchase_Order_ID) REFERENCES Book(Book_ID),
CONSTRAINT FKPurchase_Order_ID FOREIGN KEY(Purchase_Order_ID) REFERENCES Supplier(Book_ID)
);

2 个答案:

答案 0 :(得分:1)

同一个表中的两个外键不能具有相同的名称。

  

示例 - FKSales_ID

因此,更改其中一个外键约束的名称。

答案 1 :(得分:0)

您使用的相同外键名称为'FKSales_ID',您必须为同一个表提供唯一名称,同时删除'Sales_Date INTEGER(20)'中提供的长度,因为您无法在数据类型上指定列宽INT。最后,这也是重复名称'FKPurchase_Order_ID',并且还检查最后一个语句,其中book_id在引用中使用,但它在Supplier表中不存在。

相关问题