插入表时出现MySQL外键错误(错误1452),已经创建了FK

时间:2017-02-02 20:53:02

标签: java php mysql foreign-keys mysql-workbench

我的数据库存在问题,我无法在其中插入数据,它不断向我显示此错误: Mysql:错误代码:1452。无法添加或更新子行:外键约束失败。 我不是要创建新的外键,我只是想将数据插入表中 我有4个表,下面是创建代码:

CREATE TABLE IF NOT EXISTS `projectx`.`restaurants` (
  `restaurant_id` INT NOT NULL AUTO_INCREMENT COMMENT '',
  `restaurant_name` VARCHAR(45) NOT NULL COMMENT '',
  PRIMARY KEY (`restaurant_id`)  COMMENT '',
  UNIQUE INDEX `restaurant_id_UNIQUE` (`restaurant_id` ASC)  COMMENT '')
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `projectx`.`table_area`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `projectx`.`table_area` (
  `area_id` INT NOT NULL AUTO_INCREMENT COMMENT '',
  `width` INT NOT NULL COMMENT '',
  `height` INT NOT NULL COMMENT '',
  PRIMARY KEY (`area_id`)  COMMENT '',
  UNIQUE INDEX `area_id_UNIQUE` (`area_id` ASC)  COMMENT '')
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `projectx`.`table_position`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `projectx`.`table_position` (
  `position_id` INT NOT NULL AUTO_INCREMENT COMMENT '',
  `pos_x` INT NOT NULL COMMENT '',
  `pos_y` INT NOT NULL COMMENT '',
  PRIMARY KEY (`position_id`)  COMMENT '',
  UNIQUE INDEX `position_id_UNIQUE` (`position_id` ASC)  COMMENT '')
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `projectx`.`restaurant_tables`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `projectx`.`restaurant_tables` (
  `id` INT NOT NULL AUTO_INCREMENT COMMENT '',
  `table_id` INT NOT NULL COMMENT '',
  `restaurant_id` INT NOT NULL COMMENT '',
  `table_kind` VARCHAR(10) NULL COMMENT '',
  `number_of_seats` INT NOT NULL COMMENT '',
  `is_taken` TINYINT(1) NOT NULL COMMENT '',
  `table_area_id` INT NOT NULL COMMENT '',
  `table_position_id` INT NOT NULL COMMENT '',
  PRIMARY KEY (`id`, `restaurant_id`, `table_area_id`, `table_position_id`)  COMMENT '',
  UNIQUE INDEX `id_UNIQUE` (`id` ASC)  COMMENT '',
  INDEX `fk_restaurant_tables_restaurants_idx` (`restaurant_id` ASC)  COMMENT '',
  INDEX `fk_restaurant_tables_table_area1_idx` (`table_area_id` ASC)  COMMENT '',
  INDEX `fk_restaurant_tables_table_position1_idx` (`table_position_id` ASC)  COMMENT '',
  CONSTRAINT `fk_restaurant_tables_restaurants`
    FOREIGN KEY (`restaurant_id`)
    REFERENCES `projectx`.`restaurants` (`restaurant_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_restaurant_tables_table_area1`
    FOREIGN KEY (`table_area_id`)
    REFERENCES `projectx`.`table_area` (`area_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_restaurant_tables_table_position1`
    FOREIGN KEY (`table_position_id`)
    REFERENCES `projectx`.`table_position` (`position_id`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

插入代码:

insert into restaurant_tables(id,table_id,restaurant_id,table_kind,number_of_seats,is_taken,table_area_id,table_position_id) values
 (1,1,1,'square',4,0,1,1);

基本上这个想法是让一家餐馆能够拥有更多的桌子,每张桌子必须只有一个宽度,高度和pos_x,pos_y。我在这里做错了什么?表布局和约束是否良好?任何帮助都是极好的!谢谢!

1 个答案:

答案 0 :(得分:1)

如表定义脚本中所示,您有3个FK,从restaurant_tables到3个其他表。为了使您的记录有效,restaurant_tables中不能存在记录(行),除非它符合3 FK条件:

  1. 因为从restaurant_idrestaurant_tables的{​​{1}} FK。 restaurants表中必须有restaurant_id = 1行。 (关于您的插入代码)。否则指向目标表(餐馆)的指针将无法引用有效行,从而使您的记录意义减少。
  2. 关于restaurants& area_id = 1 table_area fk_restaurant_tables_table_area1中必须有position_id行。你的插入代码。
  3. 关于table_position& fk_restaurant_tables_table_position1 NSObject FBLoginView中必须有[FBLoginView self];行。你的插入代码。
  4. 由于外键约束违规而导致此错误。它与MySQL Workbench无关。