Mysql错误#1215

时间:2014-05-01 02:18:28

标签: mysql database database-design

我一直在使用mySQL来创建数据库,但是当我尝试转发工程师的EER图时,数据库一直向我发送同样的错误我尝试了多次修复,有人看到问题是什么吗?错误代码是1215

  

在服务器中执行SQL脚本
  错误:错误1215:无法添加外键约束

SQL代码:

    -- -----------------------------------------------------
    -- Table `mydb`.`Employee`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`Employee` (
      `EID` INT NOT NULL,
      `Fname` VARCHAR(45) NOT NULL,
      `Lname` VARCHAR(45) NOT NULL,
      `AddressID` INT NOT NULL,
      `PayLevel` FLOAT NOT NULL,
      `Jobtitle` VARCHAR(45) NOT NULL,
      `Date of Employment` DATE NOT NULL,
      PRIMARY KEY (`EID`),
      CONSTRAINT `fk_Employee_Store1`
        FOREIGN KEY (`EID`)
        REFERENCES `mydb`.`Store` (`EID`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB

SQL脚本执行完成:语句:8成功,1失败

以最终形式获取视图定义。 没什么可取的

这是父代码,多次尝试切换关系但是employee9顶级代码应该是Store的子代。

    -- -----------------------------------------------------
-- Table `mydb`.`Store`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Store` (
  `SID` INT NOT NULL,
  `StoreName` VARCHAR(45) NULL,
  `AddressID` INT NULL,
  `EID` INT NOT NULL,
  `CID` INT NULL,
  `MID` INT NULL,
  PRIMARY KEY (`SID`, `EID`),
  INDEX `fk_Store_Employee1_idx` (`EID` ASC),
  CONSTRAINT `fk_Store_Employee1`
    FOREIGN KEY (`EID`)
    REFERENCES `mydb`.`Employee` (`EID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

有没有人看到这个问题,顺便说一下,我已经多次检查了它的类型。

2 个答案:

答案 0 :(得分:1)

您有两个方向的外键约束。当您创建表时,第一个要创建的表将失败,因为第二个表不存在。我甚至不确定MySQL会接受像这样的循环引用。您应该删除应用于mydb.store

的外键约束

但是,如果这是必不可少的,您可以要求MySQL在创建表时忽略外键检查。只需执行

SET foreign_key_checks = 0;

在创建表格之前

SET foreign_key_checks = 1;

完成后

答案 1 :(得分:1)

您正尝试在员工和店内员工中创建另一个外键。 如果这是父/子关系,那么只有子项中使用的父键的主键。 如果你有n< - > n关系,那么你需要一个包含两个外键的新表。 如果我理解,这里你需要一个新的表(工作)与(SID,EID),其中两个指向他们各自的表(商店和员工)。创建顺序也很重要(父母先是子表)。