Wie lösche ich Unique in 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

Ich möchte den eindeutigen Schlüssel ablegen email, wie?

Maske
quelle

Antworten:

278

Sie können einfach das folgende SQL-Skript verwenden, um den Index in MySQL zu löschen:

alter table fuinfo drop index email;
Wael Dalloul
quelle
26
Beachten Sie, dass Sie einen solchen Schlüssel möglicherweise nicht löschen können, wenn ein Fremdschlüssel für die emailSpalte vorhanden ist (Fehler 150). Damit dies funktioniert, löschen Sie zuerst den Fremdschlüssel, dann den Index und erstellen Sie anschließend den Fremdschlüssel neu. zB ALTER TABLE fuinfo DROP Fremdschlüssel fk_name_for_email;
Brad Parks
61

Es gibt einen besseren Weg, bei dem Sie die Tabelle nicht ändern müssen:

mysql> DROP INDEX email ON fuinfo;

Dabei ist E-Mail der Name des eindeutigen Schlüssels (Index).

Sie können es auch so zurückbringen:

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

Dabei ist E-Mail nach IDEX der Name des Index und nicht optional. Sie können KEY anstelle von INDEX verwenden.

Es ist auch möglich, mehrspaltige eindeutige Unabhängigkeiten wie diese zu erstellen (zu entfernen):

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

Wenn Sie den Namen des mehrspaltigen Index nicht angegeben haben, können Sie ihn folgendermaßen entfernen:

mysql> DROP INDEX email ON fuinfo;

Dabei ist E-Mail der Spaltenname.

Arty
quelle
5
Alle diese machen sowieso eine ALTER TABLE, also ist es nicht so, dass du das wirklich vermeidest. Es ist nur eine andere Syntax für dasselbe.
mpeters
9

mysql> DROP INDEX email ON fuinfo;

Dabei ist E-Mail der eindeutige Schlüssel (anstelle des Spaltennamens). Den Namen des eindeutigen Schlüssels finden Sie unter

mysql> SHOW CREATE TABLE fuinfo;

Hier sehen Sie den Namen des eindeutigen Schlüssels, der beispielsweise email_2 sein kann. So...

mysql> DROP INDEX email_2 ON fuinfo;

mysql> DESCRIBE fuinfo;

Dies sollte zeigen, dass der Index entfernt wurde

Gavin
quelle
5

Verwenden Sie die folgende Abfrage:

ALTER TABLE `table_name` DROP INDEX key_name;

Wenn Sie den Schlüsselnamen nicht kennen, versuchen Sie es zuerst mit der folgenden Abfrage. Sie können den Schlüsselnamen abrufen.

SHOW CREATE TABLE table_name

ODER

SHOW INDEX FROM table_name;

Wenn Sie den Primärschlüssel aus der MySQL-Tabelle entfernen / löschen möchten, verwenden Sie dazu die folgende Abfrage

ALTER TABLE `products` DROP INDEX `PRIMARY`;

Code entnommen aus: http://chandreshrana.blogspot.in/2015/10/how-to-remove-unique-key-from-mysql.html

Chandresh
quelle
4

DROP INDEX column_nameON Tabellenname

Wählen Sie die Datenbank und die Abfrage auf der Registerkarte "SQL" aus. Dadurch wird der Index der jeweiligen Spalte entfernt. Es hat bei mir in PHP MyADMIN funktioniert

Lina Gom
quelle
3

Dies kann anderen helfen

alter table fuinfo drop index fuinfo_email_unique
Md Rashedul Hoque Bhuiyan
quelle
2

Für MySQL 5.7.11

Schritt 1: Holen Sie sich zuerst den eindeutigen Schlüssel

Verwenden Sie diese Abfrage, um es zu erhalten:

1.1) SHOW CREATE TABLE Benutzer;

Im letzten wird es so sein:

..... .....

..... .....

EINZIGARTIGER SCHLÜSSEL UK_8bv559q1gobqoulqpitq0gvr6( phoneNum)

..... .....

....

Schritt 2: Entfernen Sie den eindeutigen Schlüssel durch diese Abfrage.

ALTER TABLE Benutzer DROP INDEX UK_8bv559q1gobqoulqpitq0gvr6;

Schritt 3: Überprüfen Sie die Tabelleninformationen anhand dieser Abfrage:

DESC-Benutzer;

Dies sollte zeigen, dass der Index entfernt wurde

Das ist alles.

ArunDhwaj IIITH
quelle
1

ALTER TABLE 0_value_addition_setup  DROP  INDEX   value_code
Radhason Macht
quelle
1

Versuchen Sie es, um uique einer Spalte zu entfernen:

ALTER TABLE  `0_ms_labdip_details` DROP INDEX column_tcx

Führen Sie diesen Code in phpmyadmin aus und entfernen Sie die eindeutige Spalte

Radhason
quelle
0
 ALTER TABLE [table name] DROP KEY [key name];

das wird funktionieren.

Curtis H.
quelle