当前位置: 首页 > 知识库问答 >
问题:

mySql外键名称问题

聂和宜
2023-03-14

我在mysql工作台上设计了一个数据库。当我转到forward engineer时,我得到了(错误号:121),因为我在多个表中使用了相同的外键,我意识到这是不允许的。我有相当多的连接表,主要是n:m关系。对于这些连接表中的大多数,我都使用复合主键(由2个外键组成)。我的问题是我必须重命名这些主键和外键是唯一的吗?谢谢你的帮助。

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

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个答案

洪飞龙
2023-03-14

这对我来说很好。一个解决方案是只删除约束名称,它们将自动为您生成。

...
CONSTRAINT 
    FOREIGN KEY (`IllnessID` )
    REFERENCES `tblIllness` (`IllnessID` )
    ON DELETE CASCADE
    ON UPDATE CASCADE,
CONSTRAINT
    FOREIGN KEY (`StudentID` )
    REFERENCES `tblStudent` (`StudentID` )
    ON DELETE CASCADE
...
 类似资料:
  • 本文向大家介绍MySQL删除外键问题小结,包括了MySQL删除外键问题小结的使用技巧和注意事项,需要的朋友参考一下 MySQL:MySQL不能删除外键,抱错Error on rename of ./ruler/test2child to ./ruler/#sql2-298-92 (errno: 152) 曾经这是MySQL的一个bug,但是现在只是MySQL的一个不友好的地方。 例子如下: 这里并

  • 问题内容: 我们正在尝试重命名MySQL(5.1.31,InnoDB)中的一列,该列是另一个表的外键。 最初,我们尝试使用Django-South,但遇到了一个已知问题: http://south.aeracode.org/ticket/243 OperationalError:(1025,“将’./xxx/#sql- bf_4d’重命名为’./xxx/cave_event’时出错(错误号:150

  • hibernate如何生成外键约束名称? 如果我不定义一个名字,Hibernate会生成这样的东西 这个名字是如何产生的?可能是从字段名散列或类似的内容?我需要知道名称是否在所有实例上都相等。

  • 问题内容: 我正在尝试使用SQL Server 2008 SSIS将行从Access数据库插入MySQL数据库中。 问题出在定界符上。我正在使用5.1 ODBC驱动程序,并且可以连接到MySql并从ADO.Net目标数据源中选择一个表。在SSIS包编辑器中,所有MySql表均以双引号分隔: 如果表名中有空格,则无法从ADO.NET目标编辑器上的“使用表或视图”文本框中删除双引号或将其替换为其他内容

  • 问题内容: hibernate如何生成外键约束名称? 如果我没有定义名称,hibernate将生成类似这样的内容 这个名字是怎么产生的?也许来自字段名称的哈希值或类似的东西?我需要知道所有实例上的名称是否相等。 问题答案: Hibernate通过串联表和属性名称来生成约束名称,并将结果转换为。由于某些数据库中的约束名称长度限制,因此需要它。例如,在Oracle数据库中,外键名称的长度不能超过30个

  • 问题内容: 我的UserDetails类与Entitity类Vehicle具有一对一的映射。创建2个表并分配一个通用外键,该键将vehicle_id列(UserDetails表)映射到主键vehicleId(Vehicle表)。 我的问题是:如何将生成的外键更改为有意义的内容,例如Fk_userdetails_vehicle。 问题答案: 从JPA 2.1开始,您可以使用@ javax.persi