细节表中INSERT语句的MySql约束错误

细节表中INSERT语句的MySql约束错误,mysql,sql,database,constraints,Mysql,Sql,Database,Constraints,我的MySQL 5数据库中有两个表master/detail。主表的创建方式如下: -- ----------------------------------------------------- -- Table `LEADERBOARD`.`GRUPO_PRODUCTO` -- ----------------------------------------------------- CREATE TABLE IF NOT EXISTS `GRUPO_PRODUCTO` ( `ID` I

我的MySQL 5数据库中有两个表master/detail。主表的创建方式如下:

-- -----------------------------------------------------
-- Table `LEADERBOARD`.`GRUPO_PRODUCTO`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `GRUPO_PRODUCTO` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `NOMBRE` VARCHAR(45) NOT NULL,
  `ESTADO` VARCHAR(2) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE INDEX `ID_UNIQUE` (`ID` ASC))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `LEADERBOARD`.`DETALLE_GRUPO_PRODUCTO`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `DETALLE_GRUPO_PRODUCTO` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `PRODUCTO_ID` INT NOT NULL,
  `GRUPO_PRODUCTO_ID` INT NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE INDEX `ID_UNIQUE` (`ID` ASC),
  INDEX `fk_DETALLE_GRUPO_PRODUCTO_GRUPO_PRODUCTO1_idx` (`GRUPO_PRODUCTO_ID` ASC),
  CONSTRAINT `fk_DETALLE_GRUPO_PRODUCTO_GRUPO_PRODUCTO1`
    FOREIGN KEY (`GRUPO_PRODUCTO_ID`)
    REFERENCES `GRUPO_PRODUCTO` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
明细表的创建方式如下所示:

-- -----------------------------------------------------
-- Table `LEADERBOARD`.`GRUPO_PRODUCTO`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `GRUPO_PRODUCTO` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `NOMBRE` VARCHAR(45) NOT NULL,
  `ESTADO` VARCHAR(2) NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE INDEX `ID_UNIQUE` (`ID` ASC))
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `LEADERBOARD`.`DETALLE_GRUPO_PRODUCTO`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `DETALLE_GRUPO_PRODUCTO` (
  `ID` INT NOT NULL AUTO_INCREMENT,
  `PRODUCTO_ID` INT NOT NULL,
  `GRUPO_PRODUCTO_ID` INT NOT NULL,
  PRIMARY KEY (`ID`),
  UNIQUE INDEX `ID_UNIQUE` (`ID` ASC),
  INDEX `fk_DETALLE_GRUPO_PRODUCTO_GRUPO_PRODUCTO1_idx` (`GRUPO_PRODUCTO_ID` ASC),
  CONSTRAINT `fk_DETALLE_GRUPO_PRODUCTO_GRUPO_PRODUCTO1`
    FOREIGN KEY (`GRUPO_PRODUCTO_ID`)
    REFERENCES `GRUPO_PRODUCTO` (`ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;
使用以下插入命令,主表中已经有一些行:

INSERT INTO `GRUPO_PRODUCTO` (`ID`,`NOMBRE`,`ESTADO`) VALUES (2,'Todos menos recargas','D');
INSERT INTO `GRUPO_PRODUCTO` (`ID`,`NOMBRE`,`ESTADO`) VALUES (3,'Todos menos recargas','D');
INSERT INTO `GRUPO_PRODUCTO` (`ID`,`NOMBRE`,`ESTADO`) VALUES (6,'Otros','D');
INSERT INTO `GRUPO_PRODUCTO` (`ID`,`NOMBRE`,`ESTADO`) VALUES (7,'Todos menos recargas','A');
但是,当我尝试在明细表中插入一行引用主表中的一行时,我得到了完整性检查约束错误:

错误代码:1452。无法添加或更新子行:外键 约束未通过排行榜。详细信息\u grupo\u产品,约束 fk_DETALLE_GRUPO_PRODUCTO_GRUPO_PRODUCTO1外键 GRUPO_PRODUCTO_ID引用排行榜。GRUPO_PRODUCTO ID 关于删除A

这是详图表ID中的INSERT命令,用于使用自动增量:

INSERT INTO DETALLE_GRUPO_PRODUCTO (PRODUCTO_ID, GRUPO_PRODUCTO_ID) VALUES (13, 7);
有趣的是,当我尝试在SQL Fiddle中复制错误时,它可以毫无问题地工作。我尝试在SQL Fiddle中使用MySQL 5.5.32和MySQL 5.1.61,它可以在这两个版本中工作:

你认为我的问题是什么


p.D.“我的数据库”是一个运行在Mac OSX 10.9.3上的MySQL版本5.5.12

将MySQL数据库版本从5.5.32升级到5.6.19解决了问题。升级后,问题再也没有出现。

在这里工作得很好。仔细检查您是否已成功插入id=7的GRUPO_PRODUCTO。@制造商我仍然不知道它是mysql特定的版本还是Mac OSX的平台,但我解决了在外键的“删除时”和“更新时”选项上使用级联重新生成架构的问题。这不是很奇怪吗?