【问题标题】:Error 1215: Cannot add foreign key constraint when forward engineering错误 1215:正向工程时无法添加外键约束
【发布时间】:2016-09-25 06:25:20
【问题描述】:

当我尝试对我的新架构进行正向工程时,我收到了这个错误。任何人都可以提供您的帮助吗?

-- -----------------------------------------------------
    -- 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;

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

【问题讨论】:

  • 我很惊讶 MySQL 没有返回语法错误;我很惊讶语句执行到现在为止,约束定义之间缺少逗号,缺少结束括号...
  • 在对右大括号进行编码后,我仍然收到错误消息。请帮我找出问题。
  • MySQL Workbench 是否生成了此代码?我非常怀疑。有几个简单的语法错误(如答案所示)可能是您自己造成的。那么,怎么会呢?
  • 是的,我做到了。但仍然显示错误。

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


【解决方案1】:

我认为主要问题是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

【讨论】:

    【解决方案2】:

    在纠正语法错误后,我能够毫无问题地创建表。只要确保您以正确的顺序运行脚本。 IE。 表 SLIOP.schedule 应该最后创建,因为它正在引用 SLIOP.academic_staffSLIOP.course

    【讨论】:

      猜你喜欢
      • 2018-08-27
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 2013-06-02
      • 2018-04-28
      相关资源
      最近更新 更多