mysql外键名重复的问题。

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql外键名重复的问题。相关的知识,希望对你有一定的参考价值。

纯粹初学者,请教一下,
我已经建立好md表和xq表了,并且都是指定id为主键,现在想建一个中间表指令如下
create table mdxq
(id int not null,
constraint md_id
foreign key (id)
references md(id),

xqid int not null,
constraint xq_xqid
foreign key (xqid)
references xq(xqid)
);
错误提示是 can't write ;duplicate key in table 'mdxq'

是不是其他表有的外键起名为现在这两个外键名字中的一个了,如果有这个名字了,那么这个名字就不能再用了。个人建议是先单独建立表,建立完成后一个一个添加外键,虽然麻烦,但是出错的几率小一些,而且就算出错了也好找问题。追问

但是独立建表我添加不了约束啊…… 我之前试过,先建表后约束,然而提示出错

参考技术A 这是由于外间名称重复引起的,可能是之前已经设置了外键或者现在设置的外键重复了。

mySql 外键名问题

【中文标题】mySql 外键名问题【英文标题】:mySql foreign key name issue 【发布时间】:2013-01-23 04:00:53 【问题描述】:

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

(我还没有在下面的代码中重命名外键)

如果不存在 `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 ,
  主键(`StudentID`))
引擎 = InnoDB

如果不存在 `mydb`.`tblIllness`,则创建表(
  `IllnessID` CHAR(5) NOT NULL ,
  `Illness_Name` VARCHAR(30) NOT NULL ,
  主键(`IllnessID`))
引擎 = InnoDB

如果不存在 `mydb`.`tblStudentIllness`,则创建表(
  `IllnessID` CHAR(5) NOT NULL ,
  `StudentID` INT(6) NOT NULL ,
  `Doctor_Name` VARCHAR(30) NOT NULL ,
  `Doctor_Phonenum` INT(10) NOT NULL ,
  `药物` VARCHAR(40) NOT NULL ,
  `Medical_Advice` VARCHAR(250) NOT NULL ,
  主键 (`IllnessID`, `StudentID`) ,
  INDEX `IllnessID_idx` (`IllnessID` ASC) ,
  索引`StudentID_idx` (`StudentID` ASC) ,
  约束`IllnessID`
    外键(`IllnessID`)
    参考 `mydb`.`tblIllness` (`IllnessID`)
    删除级联
    在更新级联时,
  约束`StudentID`
    外键(`StudentID`)
    参考 `mydb`.`tblStudent` (`StudentID`)
    删除级联
    更新级联)
引擎 = 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
...

【讨论】:

感谢您的快速回复。它为我编译了 3 个表,但我有 26 个表。当我编译 26 个表时,我仍然得到 errno:121。当我遗漏了 3 个表时编译得很好。当谈到 mySQL 和这个站点时,我是一个完全的新手,所以我不确定我是否应该在这里发布完整的代码。同样,由于 23 个表编译正常,这是否意味着当您使用 2 个外键作为复合主键时,它们可以与相关表中的名称相同吗? @Richie 您可以在代码粘贴站点 (pastebin) 创建一个帐户,然后将其删除。这将使我们能够查看它并尝试找出问题所在。我没有看到命名问题的问题,但我必须查看代码。 这里是代码。希望你能发现我不能发现的错误。似乎在 tblClassTimetable、tblContinuousAssessment 和 tblContinuousAssessment 中。 pastebin.com/NVZ3NF2d

以上是关于mysql外键名重复的问题。的主要内容,如果未能解决你的问题,请参考以下文章

6.7 如何插外键 mysql 练习题

mySql 外键名问题

mysql外键复合主键[重复]

创建外键时出错:MySQL 错误 1215:无法添加外键约束 [重复]

MySQL 数据库。无法添加外键[重复]

MySQL 错误 [1215] [HY000] - 无法添加外键 [重复]