如何在MySQL中删除唯一约束?

146
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上的唯一键,该怎么做?

10个回答

290

你可以使用以下 SQL 脚本在 MySQL 中删除索引:

alter table fuinfo drop index email;

28
请注意,如果存在对email列的外键(错误150),则您可能无法像这样删除一个键。为使此操作成功,请先删除外键,然后删除索引,并在之后重新创建外键。例如:执行以下SQL语句:ALTER TABLE fuinfo DROP foreign key fk_name_for_email; - Brad Parks

62

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

mysql> DROP INDEX email ON fuinfo;

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

您也可以像这样取回它:

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

在IDEX之后的“email”是索引的名称,它是必须的。您可以使用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

10

mysql> DROP INDEX email ON fuinfo;

这里的email是唯一键(而不是列名)。你可以通过以下方式找到唯一键的名称:

mysql> SHOW CREATE TABLE fuinfo;

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

mysql> DROP INDEX email_2 ON fuinfo;

mysql> DESCRIBE fuinfo;

这应该表明索引已被删除。


6
请使用以下查询语句:
ALTER TABLE `table_name` DROP INDEX key_name;

如果您不知道key_name,那么先尝试以下查询,您可以获得key_name。

SHOW CREATE TABLE table_name

或者

SHOW INDEX FROM table_name;

如果您想从MySQL表中删除/丢弃主键,请使用以下查询

ALTER TABLE `products` DROP INDEX `PRIMARY`;

代码来自:http://chandreshrana.blogspot.in/2015/10/how-to-remove-unique-key-from-mysql.html

这是一段关于从MySQL中删除唯一键的代码。

4

DROP INDEX column_name ON table_name

在 SQL 标签页中选择数据库并查询。这将删除特定列的索引。在 PHP MyADMIN 中对我起作用。


3
这可能有助于他人。
alter table fuinfo drop index fuinfo_email_unique

2

针对MySQL 5.7.11版本

步骤1:获取唯一键

使用以下查询语句:

1.1) SHOW CREATE TABLE User;

在最后,会出现以下内容:

.....

.....

UNIQUE KEY UK_8bv559q1gobqoulqpitq0gvr6 (phoneNum)

.....

....

步骤2:通过以下查询语句删除唯一键。

ALTER TABLE User DROP INDEX UK_8bv559q1gobqoulqpitq0gvr6;

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

DESC User;

这将显示已删除索引

就是这样。


1

ALTER TABLE 0_value_addition_setup  DROP  INDEX   value_code

1

尝试去除列中的唯一性:

ALTER TABLE  `0_ms_labdip_details` DROP INDEX column_tcx

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

1
 ALTER TABLE [table name] DROP KEY [key name];

这将有效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接