首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法添加外键#1215

无法添加外键#1215
EN

Stack Overflow用户
提问于 2016-06-26 18:50:25
回答 1查看 39关注 0票数 0

当我试图从mysql工作台转发工程师时,我发现说'#1215 Cannot add foreign key'时出错了。

我有一个矩形表,它引用缩放表和实体表中的列。CREATE矩形语句引发错误。

这是我的模式

代码语言:javascript
复制
-- -----------------------------------------------------
-- 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。

似乎找不到我在这里缺少的东西

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-26 19:08:44

以下约束没有任何意义:

代码语言:javascript
复制
CONSTRAINT `idScalesF`
  FOREIGN KEY (`idScale` , `idColorScale`)
  REFERENCES `newDb`.`Scales` (`idScales` , `idScales`)
  ON DELETE RESTRICT
  ON UPDATE RESTRICT,

这看起来就像您试图说,Rectangle中的每一行都将有一对idScaleidColorScale,它们匹配Scales中的两个列,这两个列都被称为idScales。如果您想说idScaleidColorScale分别引用Scales中的一行,则需要将它们写成两个单独的外键。

作为旁白,主键总是隐式唯一的,并充当索引。您创建的…_UNIQUE索引(例如,idScales_UNIQUE)都是多余的,应该删除。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38042008

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档