当我试图从mysql工作台转发工程师时,我发现说'#1215 Cannot add foreign key'时出错了。
我有一个矩形表,它引用缩放表和实体表中的列。CREATE矩形语句引发错误。
这是我的模式
-- -----------------------------------------------------
-- Table `newDb`.`Scales`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `newDb`.`Scales` (
`idScales` INT NOT NULL AUTO_INCREMENT,
`scale_name` VARCHAR(100) NULL,
`pid` INT NULL,
`col_Id` INT NULL,
`type` VARCHAR(45) NULL,
`range_from` INT NULL,
`range_to` INT NULL,
`bandpadding` INT NULL,
PRIMARY KEY (`idScales`),
UNIQUE INDEX `idScales_UNIQUE` (`idScales` ASC),
INDEX `pid_idx` (`pid` ASC),
INDEX `col_id_idx` (`col_Id` ASC),
CONSTRAINT `pid`
FOREIGN KEY (`pid`)
REFERENCES `newDb`.`projects` (`pid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `col_id`
FOREIGN KEY (`col_Id`)
REFERENCES `newDb`.`data_sets_columns` (`col_Id`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `newDb`.`Entities`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `newDb`.`Entities` (
`idEntities` INT NOT NULL AUTO_INCREMENT,
`entity_name` VARCHAR(100) NULL,
`entity_type` VARCHAR(45) NULL,
`pid` INT NOT NULL,
PRIMARY KEY (`idEntities`),
UNIQUE INDEX `idEntities_UNIQUE` (`idEntities` ASC),
INDEX `pid_idx` (`pid` ASC),
CONSTRAINT `pidEF`
FOREIGN KEY (`pid`)
REFERENCES `newDb`.`projects` (`pid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `newDb`.`Rectangle`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `newDb`.`Rectangle` (
`idRectangle` INT NOT NULL AUTO_INCREMENT,
`rect_name` VARCHAR(100) NULL,
`X_pos` INT NOT NULL DEFAULT 0,
`Y_pos` INT NOT NULL DEFAULT 0,
`Height` INT NOT NULL DEFAULT 50,
`Width` INT NOT NULL DEFAULT 50,
`Offset_X` INT NOT NULL DEFAULT 0,
`Offset_Y` INT NOT NULL DEFAULT 0,
`Opacity` INT NULL DEFAULT 100,
`Color` VARCHAR(10) NOT NULL DEFAULT 'black',
`idScale` INT NOT NULL,
`idEntities` INT NOT NULL,
`idColorScale` INT NULL,
PRIMARY KEY (`idRectangle`),
UNIQUE INDEX `idRectangle_UNIQUE` (`idRectangle` ASC),
INDEX `idScales_idx` (`idScale` ASC, `idColorScale` ASC),
INDEX `idEntities_idx` (`idEntities` ASC),
CONSTRAINT `idScalesF`
FOREIGN KEY (`idScale` , `idColorScale`)
REFERENCES `newDb`.`Scales` (`idScales` , `idScales`)
ON DELETE RESTRICT
ON UPDATE RESTRICT,
CONSTRAINT `idEntitiesF`
FOREIGN KEY (`idEntities`)
REFERENCES `newDb`.`Entities` (`idEntities`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;还有另一个问题:MySQL Error 1215: Cannot add foreign key constraint要求同样的东西。
我跟随它,根据答案,我要么有不匹配的引擎,不匹配的列类型,或者不匹配的列。
但我似乎没有看到任何不匹配的地方,因为我引用的列和外键颜色都是无符号INT,名称是相同的,引擎是INNODB。
似乎找不到我在这里缺少的东西
发布于 2016-06-26 19:08:44
以下约束没有任何意义:
CONSTRAINT `idScalesF`
FOREIGN KEY (`idScale` , `idColorScale`)
REFERENCES `newDb`.`Scales` (`idScales` , `idScales`)
ON DELETE RESTRICT
ON UPDATE RESTRICT,这看起来就像您试图说,Rectangle中的每一行都将有一对idScale和idColorScale,它们匹配Scales中的两个列,这两个列都被称为idScales。如果您想说idScale和idColorScale分别引用Scales中的一行,则需要将它们写成两个单独的外键。
作为旁白,主键总是隐式唯一的,并充当索引。您创建的…_UNIQUE索引(例如,idScales_UNIQUE)都是多余的,应该删除。
https://stackoverflow.com/questions/38042008
复制相似问题