如何在MySQL中删除独特的?

Mas*_*ask 135 mysql indexing sql-drop

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
Run Code Online (Sandbox Code Playgroud)

我想放下独特的钥匙email,怎么样?

Wae*_*oul 270

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

alter table fuinfo drop index email;
Run Code Online (Sandbox Code Playgroud)

  • 请注意,如果存在"email"列的外键,则可能无法删除此类的键(错误150).要使其工作,请先删除外键,然后删除索引,然后重新创建外键.例如ALTER TABLE fuinfo DROP外键fk_name_for_email; (23认同)

小智 60

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

mysql> DROP INDEX email ON fuinfo;
Run Code Online (Sandbox Code Playgroud)

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

你也可以像这样把它带回来:

mysql> CREATE UNIQUE INDEX email ON fuinfo(email);
Run Code Online (Sandbox Code Playgroud)

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

此外,还可以创建(删除)多列唯一的内容:

mysql> CREATE UNIQUE INDEX email_fid ON fuinfo(email, fid);
mysql> DROP INDEX email_fid ON fuinfo;
Run Code Online (Sandbox Code Playgroud)

如果您没有指定多列索引的名称,则可以将其删除:

mysql> DROP INDEX email ON fuinfo;
Run Code Online (Sandbox Code Playgroud)

其中email是列名.

  • 所有这些实际上都会做一个ALTER TABLE,所以它并不像你真的避免那样.对于同一件事,它只是一种不同的语法. (5认同)

gav*_*vin 9

mysql> DROP INDEX电子邮件ON fuinfo;

其中email是唯一键(而不是列名).您可以找到唯一键的名称

mysql> SHOW CREATE TABLE fuinfo;
Run Code Online (Sandbox Code Playgroud)

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

mysql> DROP INDEX email_2 ON fuinfo;

mysql> DESCRIBE fuinfo;
Run Code Online (Sandbox Code Playgroud)

这应该表明索引已被删除


小智 5

使用以下查询:

ALTER TABLE `table_name` DROP INDEX key_name;
Run Code Online (Sandbox Code Playgroud)

如果你不知道key_name然后首先尝试下面的查询,你可以获得key_name.

SHOW CREATE TABLE table_name
Run Code Online (Sandbox Code Playgroud)

要么

SHOW INDEX FROM table_name;
Run Code Online (Sandbox Code Playgroud)

如果要从mysql表中删除/删除主键,请使用以下查询

ALTER TABLE `products` DROP INDEX `PRIMARY`;
Run Code Online (Sandbox Code Playgroud)

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