2016-08-05 1 views
1

Ich versuche, die folgende Abfrage ausführen:Spalte ist da, aber wenn ich versuche zu löschen, sagt es keine Spalte in MYSQL? ** Fehlercode: 1091. Kann nicht DROP ... **

ALTER TABLE ORDER_DETAIL DROP foreign key USER_ID; 

Dort heißt es:

Error Code: 1091. Can't DROP 'USER_ID'; check that column/key exists 

Wenn ich laufen:

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID 

Dort heißt es:

Error Code: 1553. Cannot drop index 'USER_ID': needed in a foreign key constraint 0.098 sec 
Aber

wenn ich laufe:

desc ORDER_DETAIL; 

ich:

Field,Type,Null,Key,Default,Extra 
ORDER_ID,int(11),NO,PRI,NULL, 
USER_ID,int(11),NO,MUL,NULL, 
ORDER_DATE,date,YES,,NULL, 

Kann jemand erklären, was hier falsch ist und wie man es beheben?

+0

Sie löschen die 'Fremdschlüssel'-Einschränkung für' ORDER_ID', aber Sie löschen die Spalte nicht. – Bobby

+0

@ e4c5 Wenn ich versuche, den Fremdschlüssel zu löschen, fragt er nach, ob die Spalte existiert oder nicht. Wenn ich versuche, die Spalte selbst zu löschen, heißt es, dass es sich um einen Fremdschlüssel handelt. –

+0

Aber die Benutzer-ID aus der Bestellung wird nicht als fk verwendet. Benutzer-ID von Benutzer ist die fk, die ich bearbeiten wollte. Dafür muss ich diese Benutzer-ID aus der Bestellung entfernen. –

Antwort

1

Da MySQL einen Index für die Fremdschlüssel erzeugt so direkt versuchen, das Löschen des Fremdschlüssels funktioniert nicht. Die hier angegebenen Antworten funktionieren also nicht.

Die richtige SQL-Abfrage, die für mich gearbeitet, ist dies:

ALTER TABLE ORDER_DETAIL DROP FOREIGN KEY ORDER_DETAIL_ibfk_1; 

Wichtig ist hier zu bemerken ist _ibfk_1

Und das nur, nachdem ich die Säule unter Verwendung fallen könnte:

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID; 
2

Sie versuchen, den Fremdschlüssel zu löschen. Dafür müssen Sie den Namen des Fremdschlüssels angeben. Um den Namen des Fremdschlüssels zu finden, führen Sie SHOW CREATE TABLE aus. verwenden, die dann in der ALTER TABLE

ALTER TABLE ORDER_DETAIL DROP foreign key key_name_from_show_create; 

Wenn es wirklich die Spalte Sie

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID; 
+0

Ich bekomme immer noch den gleichen Fehler –

+0

Überprüfen Sie meine bearbeitete Frage –

+0

ja, Sie müssen den Fremdschlüssel fallen lassen, bevor Sie die Spalte fallen lassen können . Ich denke, ich erwähnte das in Ihrer anderen Frage – e4c5

0
Use in below steps 

1) drop foreign constraint 

ALTER TABLE ORDER_DETAIL 
DROP FOREIGN KEY fk_order_detail // name of your foreign key 

2) then run below command to drop column 

ALTER TABLE ORDER_DETAIL DROP COLUMN USER_ID; 
+0

Willkommen bei Stack Overflow! Während dieses Code-Snippet die Frage lösen kann, hilft [einschließlich einer Erklärung] (// meta.stackexchange.com/questions/114762/explaining-entirely-code-based-answers) wirklich, die Qualität Ihres Posts zu verbessern. Denken Sie daran, dass Sie die Frage für Leser in der Zukunft beantworten, und diese Leute könnten die Gründe für Ihren Codevorschlag nicht kennen. Bitte versuchen Sie auch nicht, Ihren Code mit erläuternden Kommentaren zu überladen, da dies die Lesbarkeit sowohl des Codes als auch der Erklärungen verringert! – FrankerZ

0

Wenn Sie dann Constraintname verwenden Fremdschlüssel löschen möchten fallen wollen:

alter table ORDER_DETAIL drop constraint USER_ID_CONSTRAINT 

Hier ist USER_ID_CONSTRAINT der Name der Einschränkung.

Wenn Sie Spalte fallen wollen, dann verwenden:

alter table ORDER_DETAIL drop column USER_ID 

Um alle Constraintname erhalten Sie diese verwenden können:

select COLUMN_NAME, CONSTRAINT_NAME, REFERENCED_COLUMN_NAME, REFERENCED_TABLE_NAME 
from information_schema.KEY_COLUMN_USAGE 
where TABLE_NAME = 'table to be checked'; 
Verwandte Themen