出现此错误的原因是什么?
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'(错误号:150)
答案 0 :(得分:0)
根据MySQL Docs(see here):
如果MySQL从CREATE TABLE语句报告错误号1005,并且错误消息引用错误150,则表创建失败,因为未正确形成外键约束。
我会从脚本的外观上说,这可能是因为您使用的CREATE TABLE
语句在创建之前引用了表myhotel.all_roomers
。我敢打赌,在创建一个外键引用之前,你需要先创建该表。
此外,我不确定,但它看起来好像您使用id
列作为主键和foriegn键。我不确定这是否允许,但在文档中的任何地方都找不到它是不正确的。