Код ошибки: 1215 - Невозможно добавить ограничение внешнего ключа - PullRequest
0 голосов
/ 31 мая 2018

Я выполняю этот запрос на MySQL, с последней версией MySQL, установленной на MacOS.Мой 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 или чего-то подобного.

Ответы [ 3 ]

0 голосов
/ 31 мая 2018

Внешний ключ - это столбец или группа столбцов в таблице реляционной базы данных, которая обеспечивает связь между данными в двух таблицах.Он действует как перекрестная ссылка между таблицами, потому что он ссылается на первичный ключ другой таблицы, тем самым устанавливая связь между ними.

'id' - это первичный ключ в вашей таблице 'media', а не 'imdb_id',Следовательно, вы не можете сделать ссылку на 'imdb_id'.

0 голосов
/ 31 мая 2018

Внешний ключ в MySQL на самом деле не должен ссылаться на столбец первичного ключа, но он должен ссылаться на столбец, который является уникальным.Таким образом, одним из возможных исправлений было бы добавление уникального ограничения на столбец imdb_id:

ALTER TABLE media ADD CONSTRAINT cstr_imdb UNIQUE (imdb_id);
0 голосов
/ 31 мая 2018

imdb_id не является ключом в таблице мультимедиа - внешние ключи должны ссылаться на ключи (или, по крайней мере, на уникальные ограничения).Если imdb_id для таблицы мультимедиа должен быть уникальным, вы можете поместить на него УНИКАЛЬНОЕ ОГРАНИЧЕНИЕ и сможете ссылаться на него с помощью внешнего ключа.

Кроме того, при удалении вы можете установить значение null для столбца, который не можетбыть нулевым

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...