【问题标题】:Error Code: 1215 - Cannot add foreign key constraint错误代码:1215 - 无法添加外键约束
【发布时间】:2018-11-10 00:36:50
【问题描述】:

我在 MySQL 工作台上运行此查询,并在 MacOS 上安装了最新版本的 MySQL。 我的 SQL 查询是:

CREATE DATABASE  IF NOT EXISTS `imdb`;
USE `imdb`;


DROP TABLE IF EXISTS `rating`;



DROP TABLE IF EXISTS `media`;

CREATE TABLE `media` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(70) DEFAULT NULL,
  `year` varchar(70) DEFAULT NULL,
  `rated` varchar(70) DEFAULT NULL,
  `released` varchar(70) DEFAULT NULL,
  `runtime` varchar(70) DEFAULT NULL,
  `genre` varchar(70) DEFAULT NULL,
  `director` varchar(70) DEFAULT NULL,
  `writer` varchar(70) DEFAULT NULL,
  `actors` varchar(70) DEFAULT NULL,
  `plot` varchar(7000) DEFAULT NULL,
  `language` varchar(70) DEFAULT NULL,
  `country` varchar(70) DEFAULT NULL,
  `awards` varchar(70) DEFAULT NULL,
  `poster` varchar(270) DEFAULT NULL,
  `metascore` varchar(70) DEFAULT NULL,
  `imdb_rating` varchar(70) DEFAULT NULL,
  `imdb_votes` varchar(70) DEFAULT NULL,
  `imdb_id` varchar(70) NOT NULL,
  `type` varchar(70) DEFAULT NULL,
  `dvd` varchar(70) DEFAULT NULL,
  `box_office` varchar(70) DEFAULT NULL,
  `production` varchar(70) DEFAULT NULL,
  `website` varchar(70) DEFAULT NULL,
  `response` varchar(70) DEFAULT NULL,
  PRIMARY KEY (`id`)

);

CREATE TABLE `rating` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `source` varchar(70) DEFAULT NULL,
  `value` varchar(70) DEFAULT NULL,
  `imdb_id` varchar(70) NOT NULL,

  PRIMARY KEY (`id`),
  FOREIGN KEY (`imdb_id`)
  REFERENCES `media`(`imdb_id`)
  ON DELETE SET NULL
);

SET FOREIGN_KEY_CHECKS = 1;

对表评级的创建查询失败。我不知道为什么,任何帮助将不胜感激。

确切的错误响应是:

10:12:44
CREATE TABLE `rating` (   `id` int(11) NOT NULL AUTO_INCREMENT,   `source` varchar(70) DEFAULT NULL,   `value` varchar(70) DEFAULT NULL,   `imdb_id` varchar(70) NOT NULL,    PRIMARY KEY (`id`),   FOREIGN KEY (`imdb_id`)   REFERENCES `media`(`imdb_id`)   ON DELETE SET NULL )

错误代码:1215。 无法添加外键约束
0.123 秒

我正在构建一个 Spring REST 应用程序,它使用一个太多的关系来构建 IMDB 数据库的本地副本或类似的东西。

【问题讨论】:

    标签: java mysql hibernate rest


    【解决方案1】:

    MySQL 中的外键实际上不必引用主键列,但它必须引用唯一的列。因此,一种可能的解决方法是在 imdb_id 列上添加唯一约束:

    ALTER TABLE media ADD CONSTRAINT cstr_imdb UNIQUE (imdb_id);
    

    【讨论】:

      【解决方案2】:

      外键是关系数据库表中的一列或一组列,它提供了两个表中数据之间的链接。它充当表之间的交叉引用,因为它引用另一个表的主键,从而在它们之间建立链接。

      'id' 是表 'media' 而不是 'imdb_id' 中的主键。因此,您不能引用“imdb_id”。

      【讨论】:

        【解决方案3】:

        imdb_id 不是媒体表上的 key - 外键必须引用键(或至少是唯一约束)。如果媒体表上的 imdb_id 应该是唯一的,那么您可以在其上放置一个 UNIQUE CONSTRAINT 并且能够使用外键引用它。

        此外,您在不能为空的列上设置了 null

        【讨论】:

          猜你喜欢
          • 2016-10-27
          • 2016-05-01
          • 2013-07-15
          • 2018-05-13
          • 2015-05-27
          • 2017-09-18
          相关资源
          最近更新 更多