2013-08-09 3 views
6

ColumnName ist Unique (UNIQUE KEY ColumnName).MySQL muss Spalte nicht eindeutig machen. Fehler kann 'ColumnName' nicht löschen; Überprüfen Sie, ob die Spalte/der Schlüssel existiert

Ich möchte nur Spalte nicht eindeutig (muss sehr einfach sein, kann aber nicht verstehen, wie).

Wenn in phpMyAdmin überprüfen Sie bei Spalte Name und unten klicken Sie auf Unique-Symbol, erhalten #1062 - Duplicate entry '' for key 'RegistrationNumber'. OK, sehen Sie, es ist, weil, klicken Sie auf das Symbol es ADD UNIQUE.

Es gibt Eindeutiges Symbol in Struktur innerhalb der Reihe. Aber das Symbol ist nicht klickbar.

Wie in phpMyAdmin nicht gefunden, wie es geht, versuchen mit Abfrage.

Basierend auf den Empfehlungen ausprobiert ALTER TABLE TableName DROP INDEX ColumnName.

Get 1091 Can't DROP 'ColumnName'; check that column/key exists

Hier https://stackoverflow.com/a/4414694/2465936This error means that you are trying to delete a key which is being used by another table. gefunden Möglicherweise ist der Spaltenname durch eine andere Tabelle verwendet wird.

Bitte beraten, was zu tun ist, um Spalte nicht einzigartig zu machen.

Mit SHOW CREATE TABLE bekommen

Array 
(
[0] => Array 
    (
     [Table] => 18_6_TransactionPartners 
     [Create Table] => CREATE TABLE `18_6_TransactionPartners` (
     `Number` int(11) NOT NULL AUTO_INCREMENT, 
     `CompanyName` char(255) COLLATE utf8_unicode_ci NOT NULL, 
     `RegistrationNumber` char(255) COLLATE utf8_unicode_ci NOT NULL, 
     ....... 
     PRIMARY KEY (`Number`), 
     UNIQUE KEY `Number_2` (`Number`), 
     UNIQUE KEY `CompanyName` (`CompanyName`,`RegistrationNumber`), 
     KEY `Number` (`Number`) 
     ) ENGINE=InnoDB AUTO_INCREMENT=444 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci 
    ) 

) 

aktualisiert

Basierend auf @Bart Friederichs Beratung versuchte ALTER TABLE 18_6_TransactionPartners DROP INDEX Number und geänderte Spalte RegistrationNumber nicht nicht eindeutig. Verstehe nicht, warum (möglicherweise hatten wir ein Durcheinander mit eindeutigen Schlüsseln). In jedem Fall kann sich zu nicht eindeutig ändern.

+1

Sie löschen einen Index nach seinem Namen, nicht nach dem Spaltennamen (Indizes können mehrere Spalten haben) –

+0

Möchten Sie die Spalte oder den Index löschen? Die von Ihnen angegebene SQL-Adresse ist nicht gültig. – JScoobyCed

+1

Können Sie 'Tabelle beschreiben'? –

Antwort

6

Wahrscheinlich haben Sie einen Namen INDEX. Unter Verwendung von SHOW CREATE TABLE tbl können Sie die Namen der Indizes herausfinden. fallen sie dann nach Name (zB einige Test-Tabelle):

mysql> SHOW CREATE TABLE test; 
CREATE TABLE `test` (
    `entry_id` int(11) DEFAULT NULL, 
    `user_id` int(11) DEFAULT NULL, 
    UNIQUE KEY `k` (`entry_id`) 
) 

den Index zu löschen, verwenden Sie diese:

ALTER TABLE test DROP INDEX k; 

Ihr Schlüssel Name ist RegistrationNumber (wie von der Fehlermeldung erzählt wird):

+0

Anstelle von' UNIQUE KEY 'k' (' entry_id') 'haben' UNIQUE KEY CompanyName (Firmenname, RegistrationNumber) '. Versuchte 'ALTER TABLE 18_6_TransactionPartners DROP INDEX CompanyName'. Get '1091 kann 'CompanyName' nicht löschen; Überprüfen Sie, ob die Spalte/der Schlüssel vorhanden ist. – user2465936

+0

Wenn Sie "DROP 'CompanyName' nicht löschen können"; Überprüfen Sie, ob die Spalte/der Schlüssel vorhanden ist. Dann haben Sie wahrscheinlich versucht, den Index zweimal zu löschen. Als es das erste Mal gelang, gab es dir die zweite Nachricht. –

+0

Ich kopiert und eingefügt sowohl Ihre 'CREATE TABLE' und' ALTER TABLE' und es funktioniert gut. –

2

Wenn Ihre Spalte eindeutig definiert wurde UNIQUE-Klausel verwenden, können Sie etwas tun:

ALTER TABLE mytable DROP INDEX constraint_name 

Zum Abwurf der Index dies tun: -

ALTER TABLE mytable DROP INDEX index_name; 
0

Sie haben den Index fallen Verwenden Sie den Indexnamen, nicht den Spaltennamen.

Verwandte Themen