【问题标题】:Can't Create table in Mysql无法在 Mysql 中创建表
【发布时间】:2017-02-20 19:01:01
【问题描述】:

我正在创建一个包含最精彩电影的数据库,但出现错误:

ERROR 1005 (HY000) at line 19: Can't create table '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;

我错过了什么? 问候

【问题讨论】:

  • 您需要在movie 中的genre 上添加一个索引才能做到这一点。但我猜你实际上想创建从moviegenre 的外键(“每一部电影都应该属于一个现有类型”),所以将它添加到该表中。
  • 你是对的。我希望每部电影都属于一个流派,所以我将外键从流派更改为电影,然后更改“创建表”的顺序,它工作正常。谢谢@Solarflare!

标签: mysql foreign-keys


【解决方案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;

【讨论】:

  • 感谢 4Each!我做了类似的事情!:)
【解决方案2】:

我认为您需要删除此行末尾的逗号:

`genre` TINYINT UNSIGNED NOT NULL,

还有之后:

`name` VARCHAR(255) NOT NULL,

【讨论】:

    【解决方案3】:

    正如@Solarflare 在 cmets 上所说,我做了这些更改:

    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;
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-03-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-13
      • 1970-01-01
      相关资源
      最近更新 更多