使用外键和非键属性创建复合主键

时间:2012-09-09 18:05:53

标签: mysql composite-primary-key

创建批处理表后,这是我自动生成的代码。将数据插入此表时

  1. BatchID = 1,Course_CourseID = 1
  2. BatchID = 1,Course_CourseID = 2
  3. 它正在创建一个错误,说“密钥'BatchID_UNIQUE'的重复条目'1'”。 我正在使用C#2010 express 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;
    

2 个答案:

答案 0 :(得分:1)

嗯,错误信息非常清楚地引用了这个字符串:

UNIQUE KEY `BatchID_UNIQUE` (`BatchID`)

所以你要做的就是放弃这个索引(用...

ALTER TABLE `batch` DROP INDEX `BatchID_UNIQUE`

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

所有这一切都假设您确实不需要您的批处理ID是唯一的(换句话说,您的INSERT语句中没有逻辑错误。但情况似乎是这样的:对{{ 1}}已被定义为唯一(通过PRIMARY KEY)。

答案 1 :(得分: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;