错误:错误1005:无法创建表(错误号:150)

时间:2013-12-06 18:20:45

标签: mysql sql database workbench

长时间用户,第一次海报。

我正在尝试为大学作业创建数据库并获得上述错误代码 (错误:错误1005:无法创建表'mydb.songs'(错误号:150))

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

有人可以帮忙吗?

由于

  

在服务器中执行SQL脚本错误:错误1005:无法创建表   'mydb.songs'(错误号码: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失败

以最终形式获取视图定义。 没什么可取的

1 个答案:

答案 0 :(得分:0)

来自MySQL文档(Ref)

  

如果涉及InnoDB表的外键错误(通常是   MySQL服务器中的错误150),您可以获得详细的解释   通过检查输出的最新InnoDB外键错误   SHOW ENGINE INNODB状态。

使用上述内容时,不会看到其他表明确的DDL:

问题是以下问题之一,除非我在没有看到你的其他表的情况下复制你想要做的事情时遗漏了什么。

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

    和/或

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

  3. InnoDB permits a foreign key to reference any index column or group of columns. However, in the referenced table, there must be an index where the referenced columns are listed as the first columns in the same order.

    Reference from MySQL manual

  4. 请参阅下面的所有表格/您的陈述的工作版本,以便将您的表格DDL与进行比较

    SQLFiddle with Working DDL