在 mysql 中将主键转换为唯一键

Converting primary key into unique key in mysql

我有一个 table 这样的 :

+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num   | int(11) | NO   | PRI | NULL    |       |
| t     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

如果我需要将num的约束从主键改为唯一键,我该怎么办? 我做了:

alter table c2 modify num integer unique key;
output:
mysql> desc c2;
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num   | int(11) | NO   | PRI | NULL    |       |
| t     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

另一个:

alter table c2 drop constraint num;
output : ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'constraint num' at line 1

还用什么把主键改成唯一的???

show create table c2,而不是 desc,以便更好地了解有哪些索引。您的第一个成功的 alter table 添加了一个唯一键,但这并没有删除主键。要同时删除主键,请执行:

alter table c2 drop primary key;

然后 show create table 将显示 num 是唯一键,而不是主键。

但是,mysql 要求 所有 table 都有一个主键;如果您不指定一个,并且有一个唯一键,其所有列都是 not null,它将使用它作为主键,否则,它将创建一个隐藏列作为主键。显然 desc 仍然会显示一个合格的唯一键为 PRI,即使它只是被用作主键,而不是实际指定为一个。

https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=f1d7542f80421eca1b37a2373715f800

第一个唯一键将在 desc 命令中显示为主键。但是你可以用下面的命令检查

show create table c2;

然后你会找到 UNIQUE KEY num (num) 如果你可以删除唯一键,你可以用下面的 alter query/command

alter table c2 drop key num;