簡體   English   中英

插入表時,MySQL外鍵錯誤(錯誤1452),已創建FK

[英]MySQL foreign key error while inserting into tables (error 1452), already created FKs

我的數據庫有問題,無法在其中插入數據,它一直向我顯示此錯誤: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);

基本上,這個想法是讓1家餐廳能夠擁有更多的桌子,並且每個桌子只能有一個寬度,高度和pos_x,pos_y。 我在這里做錯了什么?表的布局和約束是否良好? 任何幫助都是極好的! 謝謝!

如表定義腳本中所示,您有3個FK從restaurant_tables到其他3個表。 為了使您的記錄有效,除非滿足3個FK條件,否則restaurant_tables不存在記錄(行):

  1. 因為restaurant_idrestaurant_tablesrestaurants FK。 restaurants表中必須有一個restaurant_id = 1的行。 (關於您的插入代碼)。 否則,指向目標表(餐廳)的指針將無法引用有效的行,從而使記錄的含義減少。
  2. table_area必須有關於fk_restaurant_tables_table_area1和您的插入代碼的fk_restaurant_tables_table_area1 area_id = 1的行。
  3. 關於fk_restaurant_tables_table_position1和您的插入代碼, table_position必須有一個帶有position_id的行。

該錯誤是由於違反外鍵約束而出現的,並且與MySQL Workbench無關。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM