2013-02-07 99 views
0

嗨我在mysql工作台中设计了一个数据库。当我去正向工程师时,我得到了(errno:121),因为我在多个表中使用了相同的外键,而我认识到这些外键是不允许的。我有很多联结表,主要是n:m关系。我为大多数这些联结表使用复合主键(由2个外键组成)。我的问题是,我是否必须将这些主键与外键一起重命名为唯一? 请欣赏一些帮助。mySql外键名称问题

(我还没有在下面的代码改名为外键还)我

CREATE TABLE IF NOT EXISTS `mydb`.`tblStudent` (
    `StudentID` INT(6) NOT NULL AUTO_INCREMENT , 
    `Student_Firstname` VARCHAR(20) NOT NULL , 
    `Student_Lastname` VARCHAR(20) NOT NULL , 
    `DOB` DATE NOT NULL , 
    `Student_Gender` ENUM('Male','Female') NOT NULL , 
    `Student_Address1` VARCHAR(40) NOT NULL , 
    `Student_Address2` VARCHAR(22) NOT NULL , 
    `Student_Address3` VARCHAR(14) NOT NULL , 
    `Student_Phonenum` INT(10) NULL , 
    `Student_Email` VARCHAR(60) NOT NULL , 
    `Student_Password` CHAR(128) NOT NULL , 
    `Enrollment_Date` DATE NOT NULL , 
    `Graduation_Date` DATE NULL , 
    `Student_Picture` VARCHAR(100) NOT NULL , 
    `PPSN` VARCHAR(9) NOT NULL , 
    PRIMARY KEY (`StudentID`)) 
ENGINE = InnoDB 

CREATE TABLE IF NOT EXISTS `mydb`.`tblIllness` (
    `IllnessID` CHAR(5) NOT NULL , 
    `Illness_Name` VARCHAR(30) NOT NULL , 
    PRIMARY KEY (`IllnessID`)) 
ENGINE = InnoDB 

CREATE TABLE IF NOT EXISTS `mydb`.`tblStudentIllness` (
    `IllnessID` CHAR(5) NOT NULL , 
    `StudentID` INT(6) NOT NULL , 
    `Doctor_Name` VARCHAR(30) NOT NULL , 
    `Doctor_Phonenum` INT(10) NOT NULL , 
    `Medication` VARCHAR(40) NOT NULL , 
    `Medical_Advice` VARCHAR(250) NOT NULL , 
    PRIMARY KEY (`IllnessID`, `StudentID`) , 
    INDEX `IllnessID_idx` (`IllnessID` ASC) , 
    INDEX `StudentID_idx` (`StudentID` ASC) , 
    CONSTRAINT `IllnessID` 
    FOREIGN KEY (`IllnessID`) 
    REFERENCES `mydb`.`tblIllness` (`IllnessID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
    CONSTRAINT `StudentID` 
    FOREIGN KEY (`StudentID`) 
    REFERENCES `mydb`.`tblStudent` (`StudentID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE) 
ENGINE = InnoDB

回答

1

This compiles罚款。一种解决方案是只删除约束名称,它们将自动为您生成。

... 
CONSTRAINT 
    FOREIGN KEY (`IllnessID`) 
    REFERENCES `tblIllness` (`IllnessID`) 
    ON DELETE CASCADE 
    ON UPDATE CASCADE, 
CONSTRAINT 
    FOREIGN KEY (`StudentID`) 
    REFERENCES `tblStudent` (`StudentID`) 
    ON DELETE CASCADE 
... 
+0

感谢您的快速回复.Ya它为我编译了3个表格,我有26个表格。当我编译26个表格时,我仍然得到errno:121.当我忽略3个表格时,它编译得很好。我是一个完全的新手,当涉及到mySQL和这个网站,所以不知道我是否应该在这里发布完整的代码。同样,当23个表编译好的时候,这是否意味着当你使用2个外键作为复合主键时,它的ok值是否与表中的相同? – Richie

+0

@Richie您可以在代码粘贴网站(pastebin)创建一个帐户,然后将其删除。这将使我们能够看到它并尝试找到问题。我没有看到命名问题的问题,但我必须看到代码。 – Kermit

+0

这里是代码。希望你能发现错误,因为我不能。似乎在tblClassTimetable,tblContinuousAssessment和tblContinuousAssessment。 http://pastebin.com/NVZ3NF2d – Richie