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?
mysql
mysql-error-1025
Trenton
źródło
źródło
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:
Powinno to pokazać nazwę indeksu, na przykład:
Teraz wystarczy wydać:
I wreszcie:
I jesteś gotowy!
źródło
Rzeczywiście jest to błąd klucza obcego, możesz dowiedzieć się za pomocą błędu:
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.
źródło
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:
// Upuść tutaj klucz obcy!
To zawsze działa dla mnie :)
źródło
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ę.
tutaj
DROP KEY
zamiastDROP FOREIGN KEY
,mam nadzieję, że to pomoże.
Dzięki
źródło
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:
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:
Powodzenia w twoim przedsięwzięciu.
źródło
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.
źródło
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 ;-)
źródło
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:
źródło
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ę:
źródło
Robić
zanim Operacja też może załatwić sprawę.
źródło
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.
źródło
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.
źródło
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.
źródło
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.
źródło