MySQL - #1215 - 无法添加外键约束

Posted

技术标签:

【中文标题】MySQL - #1215 - 无法添加外键约束【英文标题】:MySQL - #1215 - Cannot add foreign key constraint 【发布时间】:2015-02-04 02:41:10 【问题描述】:

mysql 对我来说是新事物。我通常使用 Oracle 数据库。我必须将一个小数据库从 Oracle 10g 转换为 MySQL 语法才能使用 phpMyAdmin。

我尝试了所有方法,但在我的代码中没有发现任何问题。我有这两个表,它们只是不会与外键挂钩。

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 - 无法添加外键约束

有人看到这两张表有问题吗?

【问题讨论】:

Dodavatel提供表定义 对不起,我的错误。当然应该有Supplier 而不是Dodavatel。我正在将代码从捷克语翻译成英语,但我忘了翻译最后一行的最后一部分。现在实际上是代码..当然仍然无法正常工作.. 【参考方案1】:

Supplier_ID 列有DECIMAL 类型,而Supplier 表中的IDINT 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)
) ;

【讨论】:

以上是关于MySQL - #1215 - 无法添加外键约束的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 错误 1215:无法添加外键约束

一般错误:1215 无法添加外键约束,Laravel 5 & MySQL

MySQL : ERROR 1215 (HY000): 无法添加外键约束

MYSQL Workbench - 错误:错误 1215:无法添加外键约束

MySQL 1215无法添加外键约束 - Laravel 5

MySQL 错误 [1215] [HY000] - 无法添加外键 [重复]