Mam tabelę, której klucz podstawowy jest używany w kilku innych tabelach i ma kilka kluczy obcych do innych tabel.
CREATE TABLE location (
locationID INT NOT NULL AUTO_INCREMENT PRIMARY KEY
...
) ENGINE = InnoDB;
CREATE TABLE assignment (
assignmentID INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
locationID INT NOT NULL,
FOREIGN KEY locationIDX (locationID) REFERENCES location (locationID)
...
) ENGINE = InnoDB;
CREATE TABLE assignmentStuff (
...
assignmentID INT NOT NULL,
FOREIGN KEY assignmentIDX (assignmentID) REFERENCES assignment (assignmentID)
) ENGINE = InnoDB;
Problem polega na tym, że kiedy próbuję upuścić jedną z kolumn klucza obcego (tj. LocationIDX), wyświetla mi się błąd.
„ERROR 1025 (HY000): Błąd podczas zmiany nazwy”
Jak mogę usunąć kolumnę w powyższej tabeli przypisań bez tego błędu?
SHOW CREATE TABLE footable;
aby zobaczyć, jaka jest nazwa ograniczenia. To nie jest sama nazwa kolumny. Dziękuję za odpowiedź!Klucze obce służą do zapewnienia integralności danych, więc nie można upuścić kolumny, o ile jest ona częścią klucza obcego. Najpierw musisz upuścić klucz.
Myślę, że wystarczyłoby następujące zapytanie:
ALTER TABLE assignmentStuff DROP FOREIGN KEY assignmentIDX;
źródło
Jak wszyscy powiedzieli powyżej, możesz łatwo usunąć FK. Jednak właśnie zauważyłem, że w pewnym momencie może być konieczne upuszczenie samego KEY. Jeśli masz jakiś komunikat o błędzie, aby utworzyć inny indeks, taki jak poprzedni, to znaczy o tej samej nazwie, przydatne byłoby porzucenie wszystkiego, co jest związane z tym indeksem.
ALTER TABLE your_table_with_fk drop FOREIGN KEY name_of_your_fk_from_show_create_table_command_result, drop KEY the_same_name_as_above
źródło
Sprawdź, jaka jest nazwa OGRANICZENIA i nazwa KLUCZA OBCEGO:
SHOW CREATE TABLE table_name;
Usuń zarówno nazwę CONSTRAINT, jak i nazwę FOREIGN KEY:
ALTER TABLE table_name DROP FOREIGN KEY the_name_after_CONSTRAINT, DROP KEY the_name_after_FOREIGN_KEY;
Mam nadzieję że to pomoże!
źródło
Oto sposób na usunięcie ograniczenia klucza obcego, zadziała. ALTER TABELA
location
.location_id
DROP FOREIGN KEYlocation_ibfk_1
;źródło
Hej, wykonałem powyższą sekwencję i znalazłem rozwiązanie.
SHOW CREATE TABLE footable;
Otrzymasz nazwę ograniczenia FK w stylu
Teraz musisz usunąć te ograniczenia. przez alter table commantd
alter table ProjectsInfo drop foreign key ProjectsInfo_ibfk_1;
Następnie upuść kolumnę tabeli,
alter table ProjectsInfo drop column clientId;
źródło
Zwykle pojawia się ten błąd, jeśli Twoje tabele korzystają z silnika InnoDB. W takim przypadku należałoby porzucić klucz obcy, a następnie zmienić tabelę i usunąć kolumnę.
Problem polega jednak na tym, że nie można usunąć klucza obcego przy użyciu nazwy kolumny, ale zamiast tego trzeba byłoby znaleźć nazwę używaną do indeksowania. Aby to znaleźć, wybierz następujące opcje:
POKAŻ STWÓRZ TABELĘ region; To powinno pokazać ci wiersz, w lewym górnym rogu kliknij opcję +, kliknij przycisk pełnego tekstu raio, a następnie kliknij idź. Tam pojawi się nazwa indeksu, coś takiego:
OGRANICZANIE region_ibfk_1 KLUCZ ZAGRANICZNY (country_id) REFERENCJE kraj (id) PRZY USUNIĘCIU ŻADNEJ AKCJI PRZY AKTUALIZACJI BRAK AKCJI Teraz wystarczy wydać:
zmień region tabeli usuń klucz obcy region_ibfk_1;
lub
prościej po prostu wpisz: - zmień tabelę NazwaTabeli usuń klucz obcy NazwaTabeli_ibfk_1 ;
pamiętaj, że jedyną rzeczą jest dodanie _ibfk_1 po nazwie tabeli, aby uzyskać następującą postać : - TableName _ibfk_1
źródło
Nie można usunąć kolumny klucza obcego, ponieważ odwołuje się do niej z tabeli
assignmentStuff
. Więc powinieneś najpierw usunąć ograniczenie klucza obcegoassignmentStuff.assignmentIDX
.Podobne pytanie zostało już tutaj zadane . Sprawdź także tutaj, aby uzyskać więcej informacji.
źródło
Spróbuj tego:
alter table Documents drop FK__Documents__Custo__2A4B4B5E
źródło
krok 1:
show create table vendor_locations;
krok 2:
ALTER TABLE vendor_locations drop foreign key vendor_locations_ibfk_1;
to działało dla mnie.
źródło
najpierw należy uzyskać rzeczywistą nazwę ograniczenia za pomocą tego zapytania
SHOW CREATE TABLE TABLE_NAME
To zapytanie spowoduje ograniczenie nazwy klucza obcego, teraz poniższe zapytanie go usunie.
ALTER TABLE TABLE_NAME DROP FOREIGN KEY COLUMN_NAME_ibfk_1
ostatnia liczba w powyższej nazwie ograniczenia zależy od liczby kluczy obcych w tabeli
źródło