首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >错误代码: 1215 -无法添加外键约束

问错误代码: 1215 -无法添加外键约束
EN

Stack Overflow用户
提问于 2018-05-31 04:49:01
回答 3查看 78关注 0票数 0

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

代码语言:javascript
复制
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;

表评等上的创建查询失败。我不知道为什么,任何帮助都会很感激。

准确的错误响应是:

代码语言:javascript
复制
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应用程序,它使用太多的关系来构建IMDB数据库的本地副本或类似的东西。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-31 05:05:36

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

代码语言:javascript
复制
ALTER TABLE media ADD CONSTRAINT cstr_imdb UNIQUE (imdb_id);
票数 2
EN

Stack Overflow用户

发布于 2018-05-31 05:01:59

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

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

票数 2
EN

Stack Overflow用户

发布于 2018-05-31 05:01:18

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

此外,在不能为空的列上有一个delete set null。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50616824

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档