在服务器中执行 SQL 脚本错误:错误 1005:无法创建表 (errno: 150)



此错误的原因可能是什么?

 CREATE  TABLE IF NOT EXISTS `myhotel`.`roomer` (
      `id` INT NOT NULL ,
      `name` VARCHAR(45) NOT NULL ,
      `start` DATE NOT NULL ,
      `finish` DATE NOT NULL ,
      `day` INT NOT NULL ,
      PRIMARY KEY (`id`) ,
      INDEX `fk_id` (`id` ASC) ,
      CONSTRAINT `fk_id`
        FOREIGN KEY (`id` )
        REFERENCES `myhotel`.`all_roomers` (`id_roomer` )
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB;
CREATE  TABLE IF NOT EXISTS `myhotel`.`all_roomers` (
  `id_roomer` INT NOT NULL ,
  `id_room` INT NOT NULL ,
  `status` TINYINT(1) NOT NULL ,
  INDEX `fk_id_room` (`id_room` ASC) ,
  PRIMARY KEY (`id_roomer`, `id_room`) ,
  CONSTRAINT `fk_id_room`
    FOREIGN KEY (`id_room` )
    REFERENCES `myhotel`.`room` (`id` )
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
CREATE  TABLE IF NOT EXISTS `myhotel`.`room` (
  `id` INT NOT NULL AUTO_INCREMENT ,
  `number` INT NOT NULL ,
  `price` INT NOT NULL ,
  `capacity` INT NOT NULL ,
  `stars` INT NOT NULL ,
  `status` TINYINT(1) NOT NULL ,
  PRIMARY KEY (`id`) )
ENGINE = InnoDB;

我得到的错误是:在服务器中执行 SQL 脚本

错误: 错误 1005: 无法创建表"myhotel.roomer" (errno: 150)

根据MySQL Docs(见这里):

如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息涉及错误150,则表创建失败,因为外键约束格式不正确。

我想从您的脚本外观来看,这可能是因为您使用的CREATE TABLE语句在创建表之前引用了myhotel.all_roomers表。我敢打赌,在创建对该表的外键引用之前,您需要先创建该表。

另外,我不确定,但看起来您似乎将id列用作主键和外键。我不确定这是否允许,但在文档中找不到任何说它不正确的地方。

相关内容

最新更新