2016-02-08 34 views
0

我想删除使用FOREIGN KEY引用数据。无法设置外键在DELETE ON CASCADE上

这里是我的两个数据表的:

CREATE TABLE `specification_variant_parent` (
    `specification_variant_parent_id` int(11) unsigned NOT NULL AUTO_INCREMENT, 
    `sort_order` tinyint(3) unsigned NOT NULL, 
    PRIMARY KEY (`specification_variant_parent_id`) 
) ENGINE=InnoDB; 


CREATE TABLE `specification_variant_parent_description` (
    `specification_variant_parent_id` smallint(5) unsigned NOT NULL, 
    `language_id` tinyint(3) unsigned NOT NULL, 
    `name` varchar(64) COLLATE utf8mb4_unicode_ci NOT NULL, 
    PRIMARY KEY (`specification_variant_parent_id`,`language_id`), 
    KEY (`specification_variant_parent_id`) 
    REFERENCES specification_variant_parent (specification_variant_parent_id) ON DELETE CASCADE 
) ENGINE=InnoDB; 

当我火了在phpMyAdmin它说:

错误表 数据库/ specification_variant_parent_description的外键约束:FOREIGN KEY (specification_variant_parent_id )参考 specification_variant_parent(specification_variant_parent_id)ON DELETE CASCADE)ENGINE = InnoDB:在引用的012中找不到索引表中引用的列显示为第一列,或 表中的列类型和引用的表不匹配 约束。

我的数据库方案有什么问题?

回答

0

您的数据类型不匹配。

在第一个表,你有

`specification_variant_parent_id` int(11) unsigned NOT NULL AUTO_INCREMEN 

声明是一个unsigned int

在第二个表的外键是

`specification_variant_parent_id` smallint(5) unsigned NOT NULL 

的数据类型和数据类型是无符号smallint

使它们都是相同的数据类型。

+0

有时候,小事情会产生变化。非常感谢您的帮助。下次我会更好地检查它。 –