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

标签 mysql sql mariadb

我是如何得出这个问题的,这本身就是一堆错误消息。

首先,它是错误消息 1452:无法添加或更新子行:外键约束失败

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

现在我重新创建了表以重现问题并发现了一个新错误,这使我更接近根本原因。

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 没有相同的引擎。所以我的解决方案是为两个表放置相同的引擎。

关于mysql - 为什么这个外键约束不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37939255/

相关文章:

java - 如何在 JPA 中获取外键引用以具有 "ON UPDATE CASCADE ON DELETE CASCADE"功能?

php - MYSQL 在不同的表中插入相同的值 PHP

mysql - SQL查询优化/重构

mysql - MariaDB 事件流动态列?

php - 仅在通过 Apache2 连接时远程 MySqli 连接超时

php 多个 mysql 插入

c# - 独立于 DBMS 的查询

php - 将数据从 CSV 文件插入到现有表中

php - 如何更新数据库中数组的值

kubernetes - kubectl执行权限被拒绝