Mysql 使用foreignkey和非key属性创建复合primarykey
这是创建批处理表后自动生成的代码。将数据插入此表时Mysql 使用foreignkey和非key属性创建复合primarykey,mysql,composite-primary-key,Mysql,Composite Primary Key,这是创建批处理表后自动生成的代码。将数据插入此表时 BatchID=1,Course\u CourseID=1 BatchID=1,Course\u CourseID=2 它正在创建一个错误,显示“BatchID_UNIQUE”键的重复条目“1”。 我正在使用C#2010 express windows应用程序以及MySQl 5.1 我的表模式在这里 CREATE TABLE `batch` ( `BatchID` int(11) NOT NULL, `Course_CourseID`
CREATE TABLE `batch` (
`BatchID` int(11) NOT NULL,
`Course_CourseID` int(11) NOT NULL,
`NoOfStudents` int(11) DEFAULT NULL,
`ClassRoom` varchar(45) DEFAULT NULL,
`StartDate` varchar(45) DEFAULT NULL,
`Day` varchar(45) DEFAULT NULL,
`Time` varchar(45) DEFAULT NULL,
PRIMARY KEY (`BatchID`,`Course_CourseID`),
UNIQUE KEY `BatchID_UNIQUE` (`BatchID`),
KEY `fk_Batch_Course1` (`Course_CourseID`),
CONSTRAINT `fk_Batch_Course1` FOREIGN KEY (`Course_CourseID`)
REFERENCES `course` (`CourseID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
那么,错误消息很明显是指这个字符串:
UNIQUE KEY `BatchID_UNIQUE` (`BatchID`)
所以你要做的就是删除这个索引(使用
…命令,或仅从表的定义中排除此行(在创建表中)
假设您确实不需要批处理ID是唯一的(换句话说,INSERT
语句中没有逻辑错误。不过,情况似乎是这样的:pairBatchID-CourseID\u CourseID
已经定义为唯一(通过主键).这样试试。删除批处理表,然后运行此sql。正确地回答说,一个唯一键不能有两个相同的值。因此,我也删除了唯一键行
CREATE TABLE IF NOT EXISTS `batch` (
`BatchID` int(11) NOT NULL,
`Course_CourseID` int(11) NOT NULL,
`NoOfStudents` int(11) DEFAULT NULL,
`ClassRoom` varchar(45) DEFAULT NULL,
`StartDate` varchar(45) DEFAULT NULL,
`Day` varchar(45) DEFAULT NULL,
`Time` varchar(45) DEFAULT NULL,
PRIMARY KEY (`BatchID`,`Course_CourseID`),
KEY `Course_CourseID` (`Course_CourseID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `batch` ADD CONSTRAINT `batch_ibfk_2` FOREIGN KEY (`Course_CourseID`)
REFERENCES `course` (`CourseId`) ON DELETE NO ACTION ON UPDATE NO ACTION;
回答得好,但她可能不太明白。不客气。谢谢,这里的意思是接受解决方案:)
CREATE TABLE IF NOT EXISTS `batch` (
`BatchID` int(11) NOT NULL,
`Course_CourseID` int(11) NOT NULL,
`NoOfStudents` int(11) DEFAULT NULL,
`ClassRoom` varchar(45) DEFAULT NULL,
`StartDate` varchar(45) DEFAULT NULL,
`Day` varchar(45) DEFAULT NULL,
`Time` varchar(45) DEFAULT NULL,
PRIMARY KEY (`BatchID`,`Course_CourseID`),
KEY `Course_CourseID` (`Course_CourseID`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1;
ALTER TABLE `batch` ADD CONSTRAINT `batch_ibfk_2` FOREIGN KEY (`Course_CourseID`)
REFERENCES `course` (`CourseId`) ON DELETE NO ACTION ON UPDATE NO ACTION;