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

Nat*_*han 6 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")
Run Code Online (Sandbox Code Playgroud)

以下是表格:

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 ;
Run Code Online (Sandbox Code Playgroud)

它是在 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'.
Run Code Online (Sandbox Code Playgroud)

小智 11

我有同样的问题。我的来源是这些桌子没有相同的引擎。所以我的解决方案是为两个表放置相同的引擎。

  • 这是一个救星:) 谢谢。 (3认同)

Nat*_*han 2

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