找不到這個錯誤是不可能的。錯誤:錯誤1215:無法添加外鍵約束(嘗試了所有內容)
我用
SHOW ENGINE INNODB STATUS
得到這個錯誤:
2015-12-05 03:20:44 16c8 Error in foreign key constraint of table mydb/enroll:
FOREIGN KEY (`sectno`)
REFERENCES `mydb`.`section` (`sectno`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB:
Cannot find an index in the referenced table where the
referenced columns appear as the first columns, or column types
in the table and the referenced table do not match for constraint.
Note that the internal storage type of ENUM and SET changed in
tables created with >= InnoDB-4.1.12, and such columns in old tables
cannot be referenced by such columns in new tables.
所以我認爲它是安全的假設,它是sectno鍵,它引用該表是造成我的麻煩。
因此,這裏有我的「登記」表(表中,它不是讓我創造)和「部分」表
-- -----------------------------------------------------
-- Table `mydb`.`section`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`section` (
`dname` VARCHAR(45) NOT NULL COMMENT '',
`cno` INT NOT NULL COMMENT '',
`sectno` INT NOT NULL COMMENT '',
`pname` VARCHAR(45) NOT NULL COMMENT '',
PRIMARY KEY (`sectno`, `dname`, `cno`) COMMENT '',
INDEX `fk_cno_section_idx` (`cno` ASC) COMMENT '',
INDEX `fk_pname_section_idx` (`pname` ASC) COMMENT '',
CONSTRAINT `fk_dname_section`
FOREIGN KEY (`dname`)
REFERENCES `mydb`.`dept` (`dname`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_cno_section`
FOREIGN KEY (`cno`)
REFERENCES `mydb`.`course` (`cno`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_pname_section`
FOREIGN KEY (`pname`)
REFERENCES `mydb`.`prof` (`pname`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`enroll`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`enroll` (
`sid` INT NOT NULL COMMENT '',
`grade` DOUBLE NULL COMMENT '',
`dname` VARCHAR(45) NOT NULL COMMENT '',
`cno` INT NOT NULL COMMENT '',
`sectno` INT NOT NULL COMMENT '',
PRIMARY KEY (`sid`, `dname`, `cno`, `sectno`) COMMENT '',
INDEX `fk_dname_enroll_idx` (`dname` ASC) COMMENT '',
INDEX `fk_cno_enroll_idx` (`cno` ASC) COMMENT '',
INDEX `fk_sectno_enroll_idx` (`sectno` ASC) COMMENT '',
CONSTRAINT `fk_sid_enroll`
FOREIGN KEY (`sid`)
REFERENCES `mydb`.`student` (`sid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_dname_enroll`
FOREIGN KEY (`dname`)
REFERENCES `mydb`.`dept` (`dname`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_cno_enroll`
FOREIGN KEY (`cno`)
REFERENCES `mydb`.`course` (`cno`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_sectno_enroll`
FOREIGN KEY (`sectno`)
REFERENCES `mydb`.`section` (`sectno`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
我使用MySQL的工作臺正向工程,所以我沒有實際鍵入自己出來的代碼。我已檢查並進行了雙重檢查和三重檢查,並且所有數據類型似乎都匹配,所以它必定是此問題,即問題:「無法在引用表中找到引用列作爲第一列顯示的索引。」我並不完全確定我已經100%瞭解它,但我認爲這意味着它們被引用的FK必須位於被引用表的第一列。所以在部分表格中,我喜歡..聲明
`sectno` INT NOT NULL COMMENT '',`
之前的所有其他列,以便它是「第一」,仍然沒有。我一小時接一小時地度過,而我只是......精神疲憊。有人請幫助
編輯:這裏是表的其餘部分:
- MySQL工作臺正向工程
SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL,ALLOW_INVALID_DATES';
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;
-- -----------------------------------------------------
-- Table `mydb`.`student`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`student` (
`sid` INT NOT NULL COMMENT '',
`sname` VARCHAR(45) NULL COMMENT '',
`sex` VARCHAR(10) NULL COMMENT '',
`age` INT NULL COMMENT '',
`year` INT NULL COMMENT '',
`gpa` DOUBLE NULL COMMENT '',
PRIMARY KEY (`sid`) COMMENT '')
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`dept`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`dept` (
`dname` VARCHAR(45) NOT NULL COMMENT '',
`numphds` INT NULL COMMENT '',
PRIMARY KEY (`dname`) COMMENT '')
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`prof`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`prof` (
`pname` VARCHAR(45) NOT NULL COMMENT '',
`dname` VARCHAR(45) NOT NULL COMMENT '',
PRIMARY KEY (`pname`) COMMENT '',
INDEX `fk_dname_prof_idx` (`dname` ASC) COMMENT '',
CONSTRAINT `fk_dname_prof`
FOREIGN KEY (`dname`)
REFERENCES `mydb`.`dept` (`dname`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`course`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`course` (
`cno` INT NOT NULL COMMENT '',
`cname` VARCHAR(45) NULL COMMENT '',
`dname` VARCHAR(45) NOT NULL COMMENT '',
PRIMARY KEY (`cno`, `dname`) COMMENT '',
INDEX `pk_dname_course_idx` (`dname` ASC) COMMENT '',
CONSTRAINT `pk_dname_course`
FOREIGN KEY (`dname`)
REFERENCES `mydb`.`dept` (`dname`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
-- -----------------------------------------------------
-- Table `mydb`.`major`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`major` (
`dname` VARCHAR(45) NOT NULL COMMENT '',
`sid` INT NOT NULL COMMENT '',
PRIMARY KEY (`dname`, `sid`) COMMENT '',
INDEX `fk_sid_major_idx` (`sid` ASC) COMMENT '',
CONSTRAINT `fk_dname_major`
FOREIGN KEY (`dname`)
REFERENCES `mydb`.`dept` (`dname`)
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_sid_major`
FOREIGN KEY (`sid`)
REFERENCES `mydb`.`student` (`sid`)
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB;
你可以清理一下,這是在創建表的時候,還是用它們創建的 – Drew
。我實際上已經創建了節表。這是在創建報名表時我遇到了困難。整個項目大約有7張桌子,我使用工作臺對所有圖表進行了前瞻性設計,這是報名表給我帶來的麻煩。這一次,我創建了每個表一個一個(而不是像我以前曾嘗試所有的一次)和eroll再次是問題表 – FrostyStraw
你沒有告訴我們3其他4個表我們需要看到 – Drew