Próbowałem tego w mysql:
mysql> alter table region drop column country_id;
I mam to:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Jakieś pomysły? Klucz obcy?
Próbowałem tego w mysql:
mysql> alter table region drop column country_id;
I mam to:
ERROR 1025 (HY000): Error on rename of './product/#sql-14ae_81' to
'./product/region' (errno: 150)
Jakieś pomysły? Klucz obcy?
Odpowiedzi:
Zwykle pojawia się ten błąd, jeśli Twoje tabele korzystają z silnika InnoDB. W takim przypadku musiałbyś porzucić klucz obcy, a następnie zmienić tabelę i usunąć kolumnę.
Ale trudna część polega 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;
Powinno to pokazać nazwę indeksu, na przykład:
OGRANICZANIE
region_ibfk_1
ZAGRANICZNEGO KLUCZA (country_id
) REFERENCJEcountry
(id
) O USUŃ ŻADNEJ AKCJI PRZY AKTUALIZACJI BRAK AKCJI
Teraz wystarczy wydać:
zmień region tabeli usuń klucz obcy
region_ibfk_1
;
I wreszcie:
zmiana regionu tabeli drop kolumna country_id;
I jesteś gotowy!
Rzeczywiście jest to błąd klucza obcego, możesz dowiedzieć się za pomocą błędu:
shell$ perror 150
MySQL error code 150: Foreign key constraint is incorrectly formed
Aby dowiedzieć się więcej o tym, co się nie powiodło, możesz skorzystać SHOW ENGINE INNODB STATUS
z sekcji NAJNOWSZY BŁĄD KLUCZA ZAGRANICZNEGO, która zawiera szczegółowe informacje o tym, co jest nie tak.
W twoim przypadku najprawdopodobniej jest to spowodowane tym, że coś odwołuje się do kolumny country_id.
Możesz również otrzymać ten błąd, próbując upuścić nieistniejący klucz obcy. Dlatego porzucając klucze obce, zawsze upewnij się, że faktycznie istnieją.
Jeśli klucz obcy istnieje, a nadal pojawia się ten błąd, spróbuj wykonać następujące czynności:
SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';
// Upuść tutaj klucz obcy!
SET SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
To zawsze działa dla mnie :)
Po prostu uruchom zapytanie alter table za pomocą „KEY” zamiast „FOREIGN KEY” w instrukcji drop. Mam nadzieję, że pomoże to rozwiązać problem i usunie ograniczenie związane z kluczem obcym i będzie można zmienić kolumny tabeli i usunąć tabelę.
ALTER TABLE slide_image_sub DROP KEY FK_slide_image_sub;
tutaj DROP KEY
zamiast DROP FOREIGN KEY
,
mam nadzieję, że to pomoże.
Dzięki
Wiem, to jest stary post, ale to pierwsze trafienie w ulubioną wyszukiwarkę wszystkich, jeśli szukasz błędu 1025.
Istnieje jednak łatwy sposób na rozwiązanie tego problemu:
Zanim wykonasz swoje polecenia, musisz najpierw wyłączyć sprawdzanie ograniczeń klucza obcego za pomocą tego polecenia:
SET FOREIGN_KEY_CHECKS = 0;
Następnie możesz wykonać swoje polecenie (polecenia).
Po zakończeniu nie zapomnij ponownie włączyć sprawdzania ograniczeń klucza obcego, używając tego polecenia:
SET FOREIGN_KEY_CHECKS = 1;
Powodzenia w twoim przedsięwzięciu.
Miałem kiedyś podobne problemy. Usunąłem klucz podstawowy z TABELI A, ale kiedy próbowałem usunąć kolumnę klucza obcego z tabeli BI, pokazał powyższy ten sam błąd.
Nie możesz upuścić klucza obcego przy użyciu nazwy kolumny i aby ominąć to w PHPMyAdmin lub w MySQL, najpierw usuń ograniczenie klucza obcego przed zmianą nazwy lub usunięciem atrybutu.
Zajrzyj do pliku błędów swojej bazy danych mysql. Według Bug # 26305 mój sql nie podaje przyczyny. Ten błąd istnieje od MySQL 4.1 ;-)
Jeśli używasz klienta takiego jak MySQL Workbench, kliknij prawym przyciskiem myszy żądaną tabelę, z której ma zostać usunięty klucz obcy, a następnie wybierz kartę klucza obcego i usuń indeksy.
Następnie możesz uruchomić zapytanie w ten sposób:
alter table table_name drop foreign_key_col_name;
Prawdopodobnie istnieje inna tabela z kluczem obcym odwołującym się do klucza podstawowego, który próbujesz zmienić.
Aby dowiedzieć się, która tabela spowodowała błąd, możesz uruchomić, SHOW ENGINE INNODB
STATUS
a następnie przejrzeć LATEST FOREIGN KEY ERROR
sekcję
Użyj kategorii SHOW CREATE TABLE, aby wyświetlić nazwę ograniczenia.
Najprawdopodobniej będzie to Categories_ibfk_1
Użyj nazwy, aby najpierw upuścić klucz obcy, a następnie kolumnę:
ALTER TABLE categories DROP FOREIGN KEY categories_ibfk_1;
ALTER TABLE categories DROP COLUMN assets_id;
Robić
SET FOREIGN_KEY_CHECKS=0;
zanim Operacja też może załatwić sprawę.
Domyślam się, że problem z ograniczeniem klucza obcego. Czy country_id jest używany jako klucz obcy w innej tabeli?
Nie jestem guru DB, ale myślę, że rozwiązałem taki problem (gdzie było ograniczenie fk), usuwając fk, robiąc moje alter-table, a następnie przerabiając fk.
Chciałbym usłyszeć, jaki jest wynik - czasami mysql jest dość tajemniczy.
W moim przypadku korzystałem z MySQL i napotkałem ten sam problem podczas upuszczania jednej z moich kolumn w tabeli. Nie mogłem znaleźć nazwy klucza obcego. Wykonałem następujące kroki, aby rozwiązać problem:
Rt. kliknij swój schemat i wybierz „Inspektor schematów”. Daje to różne tabele, kolumny, indeksy itp.
Przejdź do zakładki „Indeksy” i wyszukaj nazwę kolumny pod kolumną „Kolumna”. Po znalezieniu sprawdź nazwę tabeli dla tego rekordu pod nazwą kolumny „Tabela”. Jeśli pasuje do nazwy żądanej tabeli, zanotuj nazwę klucza obcego z kolumny o nazwie „Nazwa”.
Teraz wykonaj zapytanie: ALTER table tableNamexx DROP KEY ForeignKeyName;
Teraz możesz wykonać instrukcję drop, która powinna zostać wykonana pomyślnie.
Otrzymałem ten błąd z MySQL 5.6, ale nie miał on nic wspólnego z kluczami obcymi. Było to na komputerze z systemem Windows 7 Professional działającym jako serwer w małej sieci LAN.
Aplikacja kliencka wykonywała operację wsadową, która tworzy tabelę, wypełnia ją niektórymi danymi zewnętrznymi, a następnie wykonuje zapytanie łącząc się ze stałymi tabelami, a następnie usuwając tabelę „tymczasową”. Ta partia robi to około 300 razy, a ta konkretna procedura była wykonywana tydzień po tygodniu przez kilka lat, kiedy nagle otrzymujemy błąd 1025 Nie można zmienić nazwy problemu w losowym punkcie partii.
W moim przypadku aplikacja korzystała z 4 instrukcji DDL a następnie CREATE TABLE, po których następowały 3 CREATE INDEX, nie ma klucza obcego. Jednak tylko 2 indeksy zostały faktycznie utworzone, a nazwa rzeczywistego pliku .frm tabeli została zmieniona w momencie awarii.
Moim rozwiązaniem było pozbycie się oddzielnych instrukcji CREATE INDEX i utworzenie ich za pomocą instrukcji CREATE TABLE. To w chwili pisania tego tekstu rozwiązało problem dla mnie i mojej pomocy komuś innemu drapiącemu się po głowie, gdy znajdą ten wątek.
AverageRatings = FOREACH groupedRatings WYGENERUJ grupę AS movieID, AVG (ratings.rating) AS avgRating, COUNT (ratings.rating) AS numRatings;
Jeśli używasz polecenia jak powyżej, musisz użyć grupy małymi literami. To może rozwiązać twój problem, a mój. Przynajmniej w skrypcie PIG.