2012-09-09 231 views
2

这是创建批表后自动生成的代码。同时插入数据到该表使用外键和非键属性创建复合主键

  1. BatchID = 1,Course_CourseID = 1
  2. BatchID = 1,Course_CourseID = 2

它正在创建一个错误说“重复条目 '1' 为键“ BatchID_UNIQUE'”。 我使用C#2010速成Windows应用程序,以及MySQL 5.1中

我的表架构是这里

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; 

回答

1

好了,错误信息很清楚是指这个字符串:

UNIQUE KEY `BatchID_UNIQUE` (`BatchID`) 

所以你要做的是要么删除这个指数(...

ALTER TABLE `batch` DROP INDEX `BatchID_UNIQUE` 

...命令,或者只是从表的定义中排除此行(在CREATE TABLE中)。

所有这些假设你真的不需要你的批处理id是唯一的(换句话说,在你的INSERT声明中没有逻辑错误,但似乎是这样的:虽然:BatchID-Course_CourseID已被定义为唯一的(通过主键)。

+0

好的答案,但她可能还没有很好地理解它 – Sami

+0

非常感谢raina77ow – Jiya

0

尝试这种方式。放下你的批处理表,然后运行该SQL。不管正确回答,你不能有两个相同的vaues一个独特的密钥,所以我删除了独特的键线以及

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; 
+0

Thaks很多sami ... – Jiya

+0

不客气。谢谢,这里意味着接受解决方案:) – Sami