为什么这个外键约束不正确?

时间:2016-06-21 08:29:52

标签: mysql sql mariadb

我如何得出这个问题本身就是错误信息的意思。

首先,它是错误消息1452: Cannot add or update a child row: a foreign key constraint fails

...尝试使用绝对有效的外键插入数据。

现在我重新创建表格以便复制问题并发现一个新错误,这让我更接近根本原因。

Error Code: 1005. Can't create table `covers` (errno: 150 "Foreign key constraint is incorrectly formed")

以下是表格:

CREATE TABLE IF NOT EXISTS `entities` (
  `id` BIGINT(20) NOT NULL AUTO_INCREMENT,
  `type` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)  )
ENGINE = InnoDB
AUTO_INCREMENT = 100001
PARTITION BY KEY() PARTITIONS 10 ;

CREATE TABLE IF NOT EXISTS `covers` (
  `id` BIGINT(20) NOT NULL,
  `title` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`id`)  ,
  CONSTRAINT `covers-id`
    FOREIGN KEY (`id`)
    REFERENCES `entities` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB ;

它是在Workbench中设计的新数据库。正向工程师脚本创建表没有错误,但似乎它们存在问题。

添加show engine innodb status

的输出
------------------------
LATEST FOREIGN KEY ERROR
------------------------
2016-06-21 17:42:46 7f7ffa000700 Error in foreign key constraint of table `baka`.`IF`:
Create  table `baka`.`IF` with foreign key constraint failed. Referenced table `baka`.`entities` not found in the data dictionary near '
    FOREIGN KEY (`id`)
    REFERENCES `entities` (`id`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
ENGINE = InnoDB'.

2 个答案:

答案 0 :(得分:1)

其他表的外键约束不能引用分区表。

答案 1 :(得分:0)

我有同样的问题。 我的来历是这些表没有相同的引擎。因此,我的解决方案是为两个表使用相同的引擎。