【问题标题】:cant insert data into child table MySQL无法将数据插入子表MySQL
【发布时间】:2014-06-17 23:17:54
【问题描述】:

这是一个很常见的问题,我还没有找到解决方案,也没有找到在线解决方案,我已经搜索了几天(如果有人知道,只要给我链接将不胜感激)。

我已经使用 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)

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

【问题讨论】:

    标签: mysql database foreign-keys mysql-workbench


    【解决方案1】:

    该错误意味着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);
    

    【讨论】:

    • 我已经在 HOTEL 中添加了 10 行,ID 为 1 到 10,而不是使用 sql 查询,而是通过工作台界面,当我通过它打开它时,我可以看到所有 10 行。问题依然存在。
    • 这可能是因为我使用 1:n 识别关系将 ROOM 连接到 HOTEL 吗?如果是的话,有什么想法可以克服吗?
    【解决方案2】:

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

    SET FOREIGN_KEY_CHECKS=0

    启用:

    SET FOREIGN_KEY_CHECKS=1

    还有:主键(HOTEL_IDROOM_NO

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

    【讨论】:

      猜你喜欢
      • 2020-08-29
      • 2017-11-08
      • 2016-03-29
      • 1970-01-01
      • 2016-02-29
      • 1970-01-01
      • 1970-01-01
      • 2015-07-22
      • 1970-01-01
      相关资源
      最近更新 更多