如何在MySQL中删除唯一性?


139
Create Table: CREATE TABLE `fuinfo` (
  `fid` int(10) unsigned NOT NULL,
  `name` varchar(40) NOT NULL,
  `email` varchar(128) NOT NULL,
  UNIQUE KEY `email` (`email`),
  UNIQUE KEY `fid` (`fid`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8

我想将唯一键放在上email,如何?

Answers:


278

只需使用以下SQL脚本即可删除MySQL中的索引:

alter table fuinfo drop index email;

26
请注意,如果email存在该列的外键(错误150),则可能无法删除这样的键。为了使它起作用,请先删除外键,然后删除索引,然后再重新创建外键。例如ALTER TABLE fuinfo DROP外键fk_name_for_email;
布莱德·帕克斯

61

有一种更好的方法,不需要您更改表:

mysql> DROP INDEX email ON fuinfo;

其中email是唯一键(索引)的名称。

您也可以像这样将其恢复:

mysql> CREATE UNIQUE INDEX email ON fuinfo(email);

IDEX之后的电子邮件是索引的名称,它不是可选的。您可以使用KEY而不是INDEX。

也可以创建(删除)像这样的多列唯一索引:

mysql> CREATE UNIQUE INDEX email_fid ON fuinfo(email, fid);
mysql> DROP INDEX email_fid ON fuinfo;

如果您未指定多列索引的名称,则可以这样删除它:

mysql> DROP INDEX email ON fuinfo;

其中email是列名。


5
无论如何,所有这些实际上都会做一个ALTER TABLE,所以这并不是您真的要避免这样做。这只是同一件事的不同语法。
mpeters 2012年

9

mysql> DROP INDEX email on fuinfo;

其中email是唯一键(而不是列名)。您可以通过以下方式找到唯一键的名称

mysql> SHOW CREATE TABLE fuinfo;

在这里,您会看到唯一键的名称,例如,可以是email_2。所以...

mysql> DROP INDEX email_2 ON fuinfo;

mysql> DESCRIBE fuinfo;

这应该表明索引已删除



4

DROP INDEX column_nameON table_name

选择数据库并从sql选项卡中查询。这将删除特定列的索引。它在PHP MyADMIN中为我工作



2

对于MySQL 5.7.11

步骤1:首先获得唯一密钥

使用此查询获取它:

1.1)SHOW CREATE TABLE用户;

最后,它将是这样的:

.....

.....

唯一键UK_8bv559q1gobqoulqpitq0gvr6phoneNum

.....

....

步骤2:通过此查询删除唯一键。

ALTER TABLE用户DROP INDEX UK_8bv559q1gobqoulqpitq0gvr6;

步骤3:通过以下查询检查表信息:

DESC用户;

这应该表明索引已删除

就这样。



1

尝试删除列的uique:

ALTER TABLE  `0_ms_labdip_details` DROP INDEX column_tcx

在phpmyadmin中运行此代码并删除列的唯一


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.