无法使用DELETE ON CASCADE设置FOREIGN KEY

时间:2016-02-08 15:19:10

标签: mysql foreign-keys

我想用FOREIGN KEY删除引用数据。

以下是我的两个数据表:

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中触发时,它说:

  

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

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

1 个答案:

答案 0 :(得分:0)

您的数据类型不匹配。

在第一张表格中

`specification_variant_parent_id` int(11) unsigned NOT NULL AUTO_INCREMEN

您声明的数据类型是unsigned int

在第二个表中,外键是

`specification_variant_parent_id` smallint(5) unsigned NOT NULL

,数据类型是unsigned smallint

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