如何在mysql表中创建第二个主键/复合键

如何在mysql表中创建第二个主键/复合键,mysql,database,normalization,Mysql,Database,Normalization,我有一个名为注册的表,如下所示: enrollmentindex - which is table primary key username - varchar(64) shortname - varchar(64) role - varcar(64) 我必须离开enrollmentindex列,但我想使用用户名、简称和角色创建第二个主键(复合键) 创建新的复合键时遇到问题,因为enrollmentindex上存在该键 已尝试: ALTER TABLE enrollments ADD PRIM

我有一个名为
注册
的表,如下所示:

enrollmentindex - which is table primary key
username - varchar(64)
shortname - varchar(64)
role - varcar(64)
我必须离开
enrollmentindex
列,但我想使用
用户名
简称
角色
创建第二个
主键
(复合键)

创建新的复合键时遇到问题,因为
enrollmentindex
上存在该键

已尝试:

ALTER TABLE enrollments ADD PRIMARY KEY(username,shortname,role) 
--导致错误代码
1068

ALTER TABLE enrollments DROP PRIMARY KEY, ADD PRIMARY KEY(username,shortname,role)
--导致错误代码
1075


表中没有数据。

错误代码1068用于多个主键(不允许)

错误代码1075表示表定义不正确(自动增量字段必须定义为键)。看起来enrollmentindex是一个自动递增字段,所以它需要包含在复合主键中


我建议您在
用户名、短名、角色
上创建一个单独的唯一索引,如果您想强制执行此操作

您需要这样的复合主键吗?应该为PK创建一个自然键,并为username、shortname、role创建一个唯一索引,而不是第二个
ALTER
命令。您使用的是哪个版本的
MySQL
?而且,正如Noah所建议的那样,
唯一索引
是一个更好的选择。5.3.13。这些字段的唯一索引(而不是主键)是正确的解决方案。谢谢,唯一索引(而不是另一个主键)是票证。