【问题标题】:Converting primary key into unique key in mysql将主键转换为mysql中的唯一键
【发布时间】:2020-09-16 03:07:50
【问题描述】:

我有一张这样的桌子:

+-------+---------+------+-----+---------+-------+
| 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

我还应该使用什么来将主键更改为唯一的?

【问题讨论】:

  • 为什么要关心它是主键还是唯一键?

标签: mysql constraints primary-key unique-key


【解决方案1】:

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

alter table c2 drop primary key;

然后 show create table 会告诉你 num 是唯一键,而不是主键。

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

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

【讨论】:

    【解决方案2】:

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

    显示创建表c2;

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

    alter table c2 drop key num;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-06-04
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-03-12
      相关资源
      最近更新 更多