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`

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

  • 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` 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
    语句中没有逻辑错误。不过,情况似乎是这样的:pair
    BatchID-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;