gpt4 book ai didi

java - 插入表时发生 MySQL 外键错误(错误 1452),已创建 FK

转载 作者:行者123 更新时间:2023-11-29 11:02:18 25 4
gpt4 key购买 nike

我的数据库存在问题,无法将数据插入其中,它一直向我显示此错误: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 家餐厅能够拥有更多 table ,并且每张 table 必须只有一个宽度、高度和 pos_x、pos_y。我在这里做错了什么?表格布局和约束是否良好?任何帮助都是极好的!谢谢!

最佳答案

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

  1. 因为 restaurant_idrestaurant_tablesrestaurants 的 FK。 restaurants 表中必须有一行包含 restaurant_id = 1 的行。 (关于您的插入代码)。否则指向目标表(餐馆)的指针将无法引用有效行,从而使您的记录意义较小。
  2. table_area 中必须有一行包含 area_id = 1 的内容,涉及 fk_restaurant_tables_table_area1 和您的插入代码。
  3. table_position 中必须存在与 fk_restaurant_tables_table_position1 和您的插入代码有关的 position_id 行。

此处出现该错误是因为违反外键约束,并且与 MySQL Workbench 无关。

关于java - 插入表时发生 MySQL 外键错误(错误 1452),已创建 FK,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42012100/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com