1

このエラーの理由は何でしょうか?

 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)

4

1 に答える 1

1

MySQL Docsによると(ここを参照):

MySQLがCREATETABLEステートメントからエラー番号1005を報告し、エラーメッセージがエラー150を参照している場合、外部キー制約が正しく形成されていないため、テーブルの作成に失敗しました。

スクリプトの外観から、CREATE TABLE使用しているステートメントがmyhotel.all_roomers作成前にテーブルを参照していることが原因である可能性があります。テーブルへの外部キー参照を作成する前に、まずそのテーブルを作成する必要があると思います。

また、よくわかりませんが、id列を主キーと外部キーの両方として使用しているようにも見えます。これも許可されているかどうかはわかりませんが、ドキュメントのどこにも間違っていると書かれているところは見つかりません。

于 2012-06-26T03:22:19.743 に答える