2014-12-05 152 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