2014-12-05 144 views
1

MySQL對我來說是新事物。我通常使用Oracle數據庫。我必須將Oracle 10g中的一個小數據庫轉換爲MySQL語法,以便與phpMyAdmin一起使用。MySQL - #1215 - 無法添加外鍵約束

我嘗試了一切,但在代碼中看不到任何問題。我有這兩個表,他們只是不會與外鍵掛鉤。

CREATE TABLE Supplier 
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    Company_name  VARCHAR (100) , 
    Company_address  VARCHAR (100) , 
    Bank_account  VARCHAR (100) , 
    CONSTRAINT PK_Supplier PRIMARY KEY (ID) 
) ; 

CREATE TABLE Meat 
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    Initial_weight  VARCHAR (50) , 
    Actual_weight  VARCHAR (50) , 
    Date_of_delivery DATETIME , 
    Durability   DATETIME , 
    Supplier_ID   DECIMAL(38) NOT NULL , 
    CONSTRAINT PK_Meat PRIMARY KEY (ID) , 
    FOREIGN KEY (Supplier_ID) REFERENCES Supplier(ID) 
) ; 

MySQL查詢結束,錯誤代碼:#1215 - 不能添加外鍵約束

任何這兩個表中看到一些問題呢?

+2

爲'Dodavatel' – 2014-12-05 20:31:08

+0

對不起,我的錯誤提供表定義。當然,應該有一個「供應商」而不是「Dodavatel」。我正在將代碼從捷克語翻譯成英語,我忘了翻譯最後一行的最後一部分。現在是代碼實際上..當然還是不工作.. – Bertik 2014-12-05 22:43:31

回答

1

Supplier_ID列有DECIMAL類型,而IDSupplier表中是INT UNSIGNED

改變這樣的:

CREATE TABLE Supplier 
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    Company_name  VARCHAR (100) , 
    Company_address  VARCHAR (100) , 
    Bank_account  VARCHAR (100) , 
    CONSTRAINT PK_Supplier PRIMARY KEY (ID) 
) ; 

CREATE TABLE Meat 
(
    ID INT UNSIGNED NOT NULL AUTO_INCREMENT , 
    Initial_weight  VARCHAR (50) , 
    Actual_weight  VARCHAR (50) , 
    Date_of_delivery DATETIME , 
    Durability   DATETIME , 
    Supplier_ID   INT UNSIGNED NOT NULL , 
    CONSTRAINT PK_Meat PRIMARY KEY (ID) , 
    FOREIGN KEY (Supplier_ID) REFERENCES Supplier(ID) 
) ; 
+0

如何簡單。它現在有效。非常感謝你。 – Bertik 2014-12-06 02:45:21