繁体   English   中英

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

[英]Converting primary key into unique key in mysql

我有一张这样的桌子:

+-------+---------+------+-----+---------+-------+
| 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 c2 drop primary key;

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

但是,mysql 确实要求所有表都具有主键; 如果您不指定一个,并且存在一个所有列not null的唯一键,它将使用它作为主键,否则,它将创建一个隐藏列以用作主键。 显然desc仍将显示合格的唯一键为PRI ,即使它仅用作主键,实际上并未指定为主键。

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

第一个唯一键将在 desc 命令中显示为主键。 但是您可以使用以下命令进行检查

显示创建表c2;

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

更改表 c2 删除键号;

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM