mysql - 错误 : Error 1005: Can't create table (errno: 150)

标签 mysql sql database workbench

<分区>

老用户,第一次张贴者。

我正在尝试为大学作业创建数据库,但收到上述错误代码 (错误:错误 1005:无法创建表“mydb.songs”(错误号:150))

我已经检查过所有的 fk 和 Pk 都是一样的。所有表也应属于同一类型。

有人能帮忙吗?

谢谢

Executing SQL script in server ERROR: Error 1005: Can't create table 'mydb.songs' (errno: 150)

CREATE TABLE IF NOT EXISTS `mydb`.`Songs` (
  `SongId` INT NOT NULL,
  `SongTitle` VARCHAR(45) NULL,
  `SongLength` VARCHAR(45) NULL,
  `ProductionDate` VARCHAR(45) NULL,
  `Author` VARCHAR(45) NULL,
  `Price` VARCHAR(45) NULL,
  `AuthorId` INT NULL,
  `Musicians_MusicianId` INT NOT NULL,
  `Instruments_InstrumentId` INT NOT NULL,
  `MediaFiles_MediaId` INT NOT NULL,
  PRIMARY KEY (`SongId`, `Musicians_MusicianId`, `Instruments_InstrumentId`, `MediaFiles_MediaId`),
  INDEX `fk_Songs_Musicians1_idx` (`Musicians_MusicianId` ASC),
  INDEX `fk_Songs_Instruments1_idx` (`Instruments_InstrumentId` ASC),
  INDEX `fk_Songs_MediaFiles1_idx` (`MediaFiles_MediaId` ASC),
  CONSTRAINT `fk_Songs_Musicians1`
    FOREIGN KEY (`Musicians_MusicianId`)
    REFERENCES `mydb`.`Musicians` (`MusicianId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Songs_Instruments1`
    FOREIGN KEY (`Instruments_InstrumentId`)
    REFERENCES `mydb`.`Instruments` (`InstrumentId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Songs_MediaFiles1`
    FOREIGN KEY (`MediaFiles_MediaId`)
    REFERENCES `mydb`.`MediaFiles` (`MediaId`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

SQL脚本执行完毕:语句:18条成功,1条失败

以最终形式取回 View 定义。 没有什么可取的

最佳答案

来自 MySQL 文档 (Ref) :

In the event of a foreign key error involving InnoDB tables (usually Error 150 in the MySQL Server), you can obtain a detailed explanation of the most recent InnoDB foreign key error by checking the output of SHOW ENGINE INNODB STATUS.

在没有看到其他表的 DDL 的情况下使用上面的代码:

问题是以下问题之一,除非我在复制您正在尝试做的事情而没有看到其他表时遗漏了什么。

  1. 您在引用的 FK 之一中存在数据类型不匹配 (即 INT FK ON CHAR)

    和/或

  2. 其中一个引用的 FK 不是主键或索引 table,两种情况都会产生err 150。

  3. InnoDB 允许外键引用任何索引列或列组。但是,在被引用的表中,必须有一个索引,其中被引用的列以相同的顺序列为第一列。

    Reference from MySQL manual

请参阅下面所有表/您的语句的工作版本的 fiddle ,以将您的表 DDL 与

SQLFiddle with Working DDL

关于mysql - 错误 : Error 1005: Can't create table (errno: 150),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20430901/

相关文章:

php - UTF-8贯穿始终

mysql - 2 查询中的 LEFT JOINS 计数

sql - F# 查询异常, "unrecognized method call value"

java - 如何使用 spring NamedParameterJdbcTemplate 从存储过程中检索数据?

php - 从 for 循环获取一个数组,并在 PHP 中对该数组使用另一个 for 循环

php - 使用 PHP 将用户名和密码与 HTML 下拉列表匹配

sql - 脑筋急转弯 SQL

mysql - 计算行值的总数

php - 在 null 上调用成员函数 helper()

java - Android 从 SQLITE 中删除行