我一直在使用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;
有没有人看到这个问题,顺便说一下,我已经多次检查了它的类型。
答案 0 :(得分:1)
您有两个方向的外键约束。当您创建表时,第一个要创建的表将失败,因为第二个表不存在。我甚至不确定MySQL会接受像这样的循环引用。您应该删除应用于mydb.store
但是,如果这是必不可少的,您可以要求MySQL在创建表时忽略外键检查。只需执行
SET foreign_key_checks = 0;
在创建表格之前
SET foreign_key_checks = 1;
完成后
答案 1 :(得分:1)
您正尝试在员工和店内员工中创建另一个外键。 如果这是父/子关系,那么只有子项中使用的父键的主键。 如果你有n< - > n关系,那么你需要一个包含两个外键的新表。 如果我理解,这里你需要一个新的表(工作)与(SID,EID),其中两个指向他们各自的表(商店和员工)。创建顺序也很重要(父母先是子表)。