我有张这样的桌子:
+-------+---------+------+-----+---------+-------+
| 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我还应该用什么来把主键变成唯一的钥匙呢?
发布于 2020-09-16 04:44:23
做show create table c2,而不是desc,以便更好地了解有哪些索引。您的第一个成功的alter添加了一个唯一的键,但这并不会删除主键。要同时删除主键,请执行以下操作:
alter table c2 drop primary key;然后显示create将显示num是唯一的键,而不是主键。
但是,mysql确实要求所有表都有一个主键;如果没有指定主键,并且有一个唯一的键(所有的列都是not null ),它将使用它作为主键,否则它将创建一个隐藏列作为主键使用。而且很明显,desc仍然会显示一个合格的唯一键作为PRI,即使它只是作为主键使用,而不是实际上指定为一个主键。
https://dbfiddle.uk/?rdbms=mysql_5.5&fiddle=f1d7542f80421eca1b37a2373715f800
发布于 2020-09-16 04:50:10
第一个唯一键将在desc命令中显示为主键。但是您可以使用下面的命令进行检查
显示创建表c2;
然后您将找到num (num)的唯一键,如果可以删除唯一的键,您可以使用下面的alter /命令
alter c2下拉键num;
https://stackoverflow.com/questions/63912529
复制相似问题