如何在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。这些字段的唯一索引(而不是主键)是正确的解决方案。谢谢,唯一索引(而不是另一个主键)是票证。