首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在mysql中将主键转换为唯一键

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

Stack Overflow用户
提问于 2020-09-16 03:07:50
回答 2查看 414关注 0票数 0

我有张这样的桌子:

代码语言:javascript
复制
+-------+---------+------+-----+---------+-------+
| Field | Type    | Null | Key | Default | Extra |
+-------+---------+------+-----+---------+-------+
| num   | int(11) | NO   | PRI | NULL    |       |
| t     | int(11) | YES  |     | NULL    |       |
+-------+---------+------+-----+---------+-------+

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

代码语言:javascript
复制
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    |       |
+-------+---------+------+-----+---------+-------+

另一个:

代码语言:javascript
复制
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

我还应该用什么来把主键变成唯一的钥匙呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-09-16 04:44:23

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

代码语言:javascript
复制
alter table c2 drop primary key;

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

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

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

票数 0
EN

Stack Overflow用户

发布于 2020-09-16 04:50:10

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

显示创建表c2;

然后您将找到num (num)的唯一键,如果可以删除唯一的键,您可以使用下面的alter /命令

alter c2下拉键num;

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63912529

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档