首页 文章

无法在Mysql中创建表

提问于
浏览
0

我正在创建一个最伟大的电影数据库,我收到错误:

ERROR 1005(HY000)第19行:无法创建表'Greatest_Movies.genre'(错误号: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;

我错过了什么?问候

3 回答

  • 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

    正如@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,
    

相关问题