2017-02-20 3 views
0

Я создаю базу данных больших фильмов, и я получаю сообщение об ошибке:Не удается создать таблицу в Mysql

ERROR 1005 (HY000) в строке 19: Невозможно создать таблицу «Greatest_Movies.genre» (errno: 150)

Я проверил это сообщение: Error Code: 1005. Can't create table '...' (errno: 150) и пробовал много вещей, но без успешных действий.

Это то, что на самом деле есть:

DROP DATABASE `Greatest_Movies`; 
CREATE DATABASE `Greatest_Movies`; 
USE `Greatest_Movies` ; 

CREATE TABLE IF NOT EXISTS `movie` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`film` VARCHAR(255) NOT NULL, 
`director` VARCHAR(255) NOT NULL, 
`release_year` VARCHAR(255) NOT NULL, 
`oscars` TINYINT NULL, 
`IMDB_link` VARCHAR(255) NOT NULL, 
`film_page` VARCHAR(255) NOT NULL, 
`country` VARCHAR(255) NOT NULL, 
`genre` TINYINT UNSIGNED NOT NULL, 

PRIMARY KEY (`id`)) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `genre` (
    `id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, 
    `name` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`id`), 
    FOREIGN KEY (`id`) REFERENCES `movie`(`genre`)) 
ENGINE = InnoDB; 

Что я не хватает? С уважением

+1

Чтобы сделать это, вам нужно добавить индекс в жанре 'movie'. Но я предполагаю, что вы действительно хотите создать внешний ключ от 'movie' до' genre' («каждый фильм должен принадлежать одному существующему жанру»), поэтому добавьте его в эту таблицу. – Solarflare

+0

Вы правы. Я хочу, чтобы каждый фильм принадлежал к жанру, поэтому я изменил внешний ключ из жанра в фильм, а затем изменил порядок «Создание таблиц», и он работал правильно. Спасибо @Solarflare! – Albeis

ответ

0

Как @Solarflare сказал в комментариях, я сделал это изменение:

DROP DATABASE `Greatest_Movies`; 
CREATE DATABASE `Greatest_Movies`; 
USE `Greatest_Movies`; 


CREATE TABLE IF NOT EXISTS `genre` (
`id` TINYINT UNSIGNED NOT NULL AUTO_INCREMENT, 
`name` VARCHAR(255) NOT NULL, 
PRIMARY KEY (`id`)) 

ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `movie` (
`id` INT UNSIGNED NOT NULL AUTO_INCREMENT, 
`film` VARCHAR(255) NOT NULL, 
`director` VARCHAR(255) NOT NULL, 
`release_year` VARCHAR(255) NOT NULL, 
`oscars` TINYINT NULL, 
`IMDB_link` VARCHAR(255) NOT NULL, 
`film_page` VARCHAR(255) NOT NULL, 
`country` VARCHAR(255) NOT NULL, 
`genre` TINYINT UNSIGNED NOT NULL, 

PRIMARY KEY (`id`), 
FOREIGN KEY (`genre`) REFERENCES `genre`(`id`)) 
ENGINE = InnoDB; 
0

Я думаю, вы должны удалить запятую в конце строки:

`genre` TINYINT UNSIGNED NOT NULL, 

А также после того, как:

`name` VARCHAR(255) NOT NULL, 
1

Эта работа сценария и тестирование, попробуйте его:

DROP DATABASE `Greatest_Movies`; 
CREATE DATABASE `Greatest_Movies`; 
USE `Greatest_Movies` ; 

DROP TABLE IF EXISTS `genre`; 
CREATE TABLE `genre` (
    `id` tinyint(3) unsigned NOT NULL AUTO_INCREMENT, 
    `name` varchar(255) NOT NULL, 
    PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

DROP TABLE IF EXISTS `movie`; 
CREATE TABLE `movie` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `film` varchar(255) NOT NULL, 
    `director` varchar(255) NOT NULL, 
    `release_year` varchar(255) NOT NULL, 
    `oscars` tinyint(4) DEFAULT NULL, 
    `IMDB_link` varchar(255) NOT NULL, 
    `film_page` varchar(255) NOT NULL, 
    `country` varchar(255) NOT NULL, 
    `genre` tinyint(3) unsigned NOT NULL, 
    PRIMARY KEY (`id`), 
    KEY `genre_fk` (`genre`), 
    CONSTRAINT `genre_fk` FOREIGN KEY (`genre`) REFERENCES `genre` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 
+0

Спасибо 4Each! Я сделал что-то подобное! :) – Albeis

Смежные вопросы