无法将数据插入子表MySQL

时间:2014-05-01 13:10:39

标签: mysql database foreign-keys mysql-workbench

这是一个非常普遍的问题,我还没有找到解决方案,也没有找到一个在线解决方案,我一直在寻找一些日子(如果有人知道一个,只是给我链接将非常感谢)。

我使用MySQL Workbench创建了一个数据库,带有wamp的服务器并将使用netbeans ide 8.0为我的项目创建一个php应用程序。

我的问题是我无法在“孩子”中添加数据(对不起,这个词是不准确的)表格。下面的代码来自MySQL Workbench的“来自eer模型的正向工程sql代码”,并且仅涉及我遇到问题的一个子表:

CREATE TABLE IF NOT EXISTS `ASTIR`.`HOTEL` (
`ID` INT NOT NULL,
`NAME` VARCHAR(45) NOT NULL,
`STREET` VARCHAR(45) NULL,
`No` INT NULL,
`ΤΚ` INT NULL,
`CITY` VARCHAR(45) NULL,
`RATING` SMALLINT NULL,
`YEAR OF CONSTRUCTION` YEAR NULL,
`YEAR OF RENOVATION` YEAR NULL,
PRIMARY KEY (`ID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `ASTIR`.`ROOM` (
`HOTEL_ID` INT NOT NULL,
`ROOM_No` INT NOT NULL,
`TYPE` VARCHAR(45) NOT NULL,
`PRICE` DOUBLE NOT NULL,
PRIMARY KEY (`HOTEL_ID`, `ROOM_NO`),
INDEX `fk_ROOM_HOTEL1_idx` (`HOTEL_ID` ASC),
CONSTRAINT `fk_ROOM_HOTEL1`
FOREIGN KEY (`HOTEL_ID`)
REFERENCES `ASTIR`.`HOTEL` (`ID`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;

所以,当我输入命令

INSERT INTO ROOM(HOTEL_ID,ROOM_No,TYPE,PRICE) VALUES(1,1,'SUITE',55);

我收到了消息

Error Code: 1452. Cannot add or update a child row: a foreign key constraint fails (`ASTIR`.`ROOM`, CONSTRAINT `fk_ROOM_HOTEL1` FOREIGN KEY (`HOTEL_ID`) REFERENCE)

任何想法都会有所帮助,非常感谢:/

2 个答案:

答案 0 :(得分:2)

该错误意味着HOTEL表中没有id = 1的行。

您需要先插入父(HOTEL)行,然后才能插入子行(ROOM)行。

INSERT INTO HOTEL(ID,NAME) VALUES(1,'First Hotel');
INSERT INTO ROOM(HOTEL_ID,ROOM_No,TYPE,PRICE) VALUES(1,1,'SUITE',55);

答案 1 :(得分:0)

也许在运行查询之前尝试禁用外键,然后在完成后再次启用它。可以手动将数据直接添加到创建的表中(无需编码)吗? 。禁用外键

SET FOREIGN_KEY_CHECKS = 0

启用:

SET FOREIGN_KEY_CHECKS = 1

另外:PRIMARY KEY(HOTEL_IDROOM_NO

为什么不将ROOM_NO设置为主键?你所做的通常用于n:n关系,通常有一个中间表。