如何在MySQL数据库中创建复合主键

6

我正在使用MySQL服务器。在其中创建了一个名为“question”的表,表的列属性为(course,subject,year,question)。 我想创建一个主键(或组合键),由(course+subject+year)组成。即对于特定的course+subject+year组合,只能有一个问题。只会有一行包含(course+subject+year)的组合,无法创建另一行。 我通过以下方式完成:

primary key(course,subject,year);

但是它没有起作用。我仍然可以创建具有相同课程、科目和年份组合的两行。

有人能告诉我如何创建复合键吗?


MySQL服务器还是SQL服务器?-- https://dev59.com/N2025IYBdhLWcg3wtofX - jcho360
@Oliver 为了更好的分析报告……我仍然可以使用相同的值集(课程+科目+年份)创建两个。 - RbG
REST 是什么意思?是插入命令还是创建表命令? - RbG
1
请发布完整的“CREATE TABLE”语句以及一些创建重复行的示例语句。 - Barmar
我在sqlfiddle上尝试重现这个问题,但是出现了错误:“模式创建失败:主键'PRIMARY'上已存在重复条目'English-Composition-101'。” - Barmar
显示剩余4条评论
2个回答

6

语法为CONSTRAINT constraint_name PRIMARY KEY(col1,col2,col3),例如:

CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)

上面的示例只有在创建表时编写才能起作用,例如:

CREATE TABLE person (
   P_Id int ,
   ............,
   ............,
   CONSTRAINT pk_PersonID PRIMARY KEY (P_Id,LastName)
);

要向现有表添加此约束,您需要按照以下语法进行操作:

ALTER TABLE table_name ADD CONSTRAINT constraint_name PRIMARY KEY (P_Id,LastName)

4
如果你在看的是MySQL,那么你应该做类似以下的操作:
ALTER TABLE table_name ADD PRIMARY KEY (a, b, c);

我按照你上面创建表的方法设置了一个主键,但仍然允许有两行或更多行拥有相同的a、b、c组合。 - RbG
同一组合顺序相同吗?例如a=1,b=2,c=3在多行中出现? - bizzehdee
运行 SHOW INDEXS table_name 和/或 SHOW KEYS 命令,查看键是否实际设置。 - bizzehdee

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接