为什么这个外键约束不正确?
Why is this foreign key constraint incorrectly formed?
我是如何得出这个问题的,这本身就是一堆错误消息。
首先是错误信息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 中设计的新数据库。 Forward Engineer 脚本创建的表没有错误,但它们似乎有问题。
添加 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'.
分区的 table 不能被其他 table 的外键约束引用。
我遇到了同样的问题。
我的来源是桌子没有相同的引擎。所以我的解决方案是为两个表放置相同的引擎。
同样的问题。错误是我从中恢复的转储文件中的表顺序错误。所以通过手动创建引用的表首先解决了问题。
我是如何得出这个问题的,这本身就是一堆错误消息。
首先是错误信息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 中设计的新数据库。 Forward Engineer 脚本创建的表没有错误,但它们似乎有问题。
添加 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'.
分区的 table 不能被其他 table 的外键约束引用。
我遇到了同样的问题。 我的来源是桌子没有相同的引擎。所以我的解决方案是为两个表放置相同的引擎。
同样的问题。错误是我从中恢复的转储文件中的表顺序错误。所以通过手动创建引用的表首先解决了问题。