细节表中INSERT语句的MySql约束错误
我的MySQL 5数据库中有两个表master/detail。主表的创建方式如下:细节表中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
-- -----------------------------------------------------
-- 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的平台,但我解决了在外键的“删除时”和“更新时”选项上使用级联重新生成架构的问题。这不是很奇怪吗?