在 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;
我有一个 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;