我在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
这对我来说很好。一个解决方案是只删除约束名称,它们将自动为您生成。
...
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