错误1215:正向工程时无法添加外键约束

时间:2016-05-27 03:54:09

标签: mysql mysql-workbench mysql-error-1064

当我尝试转发设计我的新架构时,我收到此错误。任何人都可以提供帮助吗?

-- -----------------------------------------------------
    -- Table `SLIOP`.`schedule`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `SLIOP`.`schedule` (
      `scheduleID` INT NOT NULL AUTO_INCREMENT,
      `lecturerID` INT NOT NULL,
      `courseID` INT NOT NULL,
      `type` VARCHAR(30) NOT NULL,
      PRIMARY KEY (`scheduleID`),
      INDEX `fk_schedule_academic_staff1_idx` (`lecturerID` ASC),
      INDEX `fk_schedule_course1_idx` (`courseID` ASC),
      CONSTRAINT `lecturerID`
        FOREIGN KEY (`lecturerID`)
        REFERENCES `SLIOP`.`academic_staff` (`lecturerID`)
        CONSTRAINT `courseID`
        FOREIGN KEY (`courseID`)
        REFERENCES `SLIOP`.`course` (`courseID`)
        ENGINE = InnoDB

父表

     -- -----------------------------------------------------
     -- Table `SLIOP`.`course`
     -- -----------------------------------------------------
     CREATE TABLE IF NOT EXISTS `SLIOP`.`course` (
     `courseID` INT NOT NULL AUTO_INCREMENT,
     `course_code` VARCHAR(10) NOT NULL,
     `course_name` VARCHAR(40) NOT NULL,
     `lecturer_name` VARCHAR(40) NOT NULL,
     `time` TIMESTAMP NOT NULL,
     `fee` DECIMAL(10,2) NOT NULL,
     `requirement` MEDIUMTEXT NOT NULL,
     `lecturerID` INT NOT NULL,
     PRIMARY KEY (`courseID`),
     ENGINE = InnoDB;

-- -----------------------------------------------------
-- Table `SLIOP`.`academic_staff`
-- -----------------------------------------------------
 CREATE TABLE IF NOT EXISTS `SLIOP`.`academic_staff` (
 `lecturerID` INT NOT NULL AUTO_INCREMENT,
 `first_name` VARCHAR(60) NOT NULL,
 `last_name` VARCHAR(60) NOT NULL,
 `profile_image` BLOB NULL,
 PRIMARY KEY (`lecturerID`))
 ENGINE = InnoDB;

我在这里搜索了相关的帖子,但我无法找到我的错误。

2 个答案:

答案 0 :(得分:0)

我认为主要问题是在CONSTRAINT courseID

之前缺少逗号

但你也错过了几个结束括号。

所以这是工作声明:

http://sqlfiddle.com/#!9/2bb11

     CREATE TABLE IF NOT EXISTS `course` (
     `courseID` INT NOT NULL AUTO_INCREMENT,
     `course_code` VARCHAR(10) NOT NULL,
     `course_name` VARCHAR(40) NOT NULL,
     `lecturer_name` VARCHAR(40) NOT NULL,
     `time` TIMESTAMP NOT NULL,
     `fee` DECIMAL(10,2) NOT NULL,
     `requirement` MEDIUMTEXT NOT NULL,
     `lecturerID` INT NOT NULL,
     PRIMARY KEY (`courseID`)
     )
     ENGINE = InnoDB;

 CREATE TABLE IF NOT EXISTS `academic_staff` (
 `lecturerID` INT NOT NULL AUTO_INCREMENT,
 `first_name` VARCHAR(60) NOT NULL,
 `last_name` VARCHAR(60) NOT NULL,
 `profile_image` BLOB NULL,
 PRIMARY KEY (`lecturerID`))
 ENGINE = InnoDB;

    CREATE TABLE IF NOT EXISTS `schedule` (
      `scheduleID` INT NOT NULL AUTO_INCREMENT,
      `lecturerID` INT NOT NULL,
      `courseID` INT NOT NULL,
      `type` VARCHAR(30) NOT NULL,
      PRIMARY KEY (`scheduleID`),
      INDEX `fk_schedule_academic_staff1_idx` (`lecturerID` ASC),
      INDEX `fk_schedule_course1_idx` (`courseID` ASC),
      CONSTRAINT `lecturerID`
        FOREIGN KEY (`lecturerID`)
        REFERENCES `academic_staff` (`lecturerID`),
        CONSTRAINT `courseID`
        FOREIGN KEY (`courseID`)
        REFERENCES `course` (`courseID`))
        ENGINE = InnoDB

答案 1 :(得分:0)

在纠正语法错误后,我能够毫无问题地创建表。只需确保以正确的顺序运行脚本。即 表 SLIOP.schedule 应该在引用后最后创建 SLIOPacademic_staff SLIOPcourse