MySQL:禁止两列具有相同的值

MySQL:禁止两列具有相同的值,mysql,Mysql,我现在有一个表格记录了学生们正在学习的课程 CREATE TABLE IF NOT EXISTS `test`.`course_enrollment` ( `courseID` INT(10) UNSIGNED NOT NULL, `studentID` BIGINT(10) UNSIGNED NOT NULL, `startDate` DATE NULL DEFAULT NULL, `endDate` DATE NULL DEFAULT NULL, `semester` VARCHAR(5)

我现在有一个表格记录了学生们正在学习的课程

CREATE TABLE IF NOT EXISTS `test`.`course_enrollment` (
`courseID` INT(10) UNSIGNED NOT NULL,
`studentID` BIGINT(10) UNSIGNED NOT NULL,
`startDate` DATE NULL DEFAULT NULL,
`endDate` DATE NULL DEFAULT NULL,
`semester` VARCHAR(5) NULL DEFAULT NULL,
`section` TINYINT(3) UNSIGNED NULL DEFAULT NULL,
`courseGrade` VARCHAR(3) NULL DEFAULT NULL,
FOREIGN KEY (`courseID`) REFERENCES courses(`courseID`) ON DELETE CASCADE
   ON UPDATE CASCADE,
FOREIGN KEY (`studentID`) REFERENCES students(`studentID`) ON DELETE CASCADE
   ON UPDATE CASCADE);
但是,我知道一个表中不能有两个主键。但我希望能够插入两个相同的课程,只要学期不同

示例:(不相关,但FA代表秋天,SP代表春天)

课程ID和学期不能具有完全相同的课程ID和学期副本

如果我把这学期作为一个唯一的索引,那么我就不能将同一学期分配给多个课程


非常感谢您的帮助。

在这种情况下,请创建多列索引。我认为不能让同一个学生在同一学期注册同一门课程,所以我会在这三个字段上创建一个唯一的索引。请参阅上的mysql文档。

您必须创建唯一的复合密钥,以便两者的组合是唯一的

ALTER TABLE `course_enrollment` ADD UNIQUE `unique_index`(studentID,`courseID`,`semester`);

编辑:-在唯一约束中添加了studentId。对于每个studentId,courseId和Serm必须是唯一的。

这意味着两个学生将无法在同一学期注册同一课程。是的,对不起,我忘记添加该信息了。谢谢你,影子!这实际上应该是表的主键。一个表只有一个主键,但该键可以是多列的,在本例中,它应该是多列的。
ALTER TABLE `course_enrollment` ADD UNIQUE `unique_index`(studentID,`courseID`,`semester`);