# 1025 - Błąd podczas zmiany nazwy „./database/#sql-2e0f_1254ba7” na „./database/table” (errno: 150)

81

Więc próbuję dodać klucz podstawowy do jednej z tabel w mojej bazie danych. W tej chwili ma taki klucz podstawowy:

PRIMARY KEY (user_id, round_number)

Gdzie user_id to klucz obcy.

Próbuję to zmienić na to:

PRIMARY KEY (user_id, round_number, created_at)

Robię to w phpmyadmin, klikając ikonę klucza podstawowego w widoku struktury tabeli.

Oto błąd, który otrzymuję:

#1025 - Error on rename of './database/#sql-2e0f_1254ba7' to './database/table' (errno: 150)

Jest to baza danych MySQL z silnikiem tabel InnoDB.

Richard Knop
źródło
1
Szybkie wyszukiwanie za pomocą Google daje mi wyobrażenie, że ten problem jest związany z ograniczeniami. Możliwe pomocne linki: dev.mysql.com/doc/refman/5.0/en/innodb-error-codes.html i simplicidade.org/notes/archives/2008/03/mysql_errno_150.html
Lekensteyn

Odpowiedzi:

139

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 STATUSa następnie przejrzeć LATEST FOREIGN KEY ERRORsekcję.

Ike Walker
źródło
2
W moim przypadku baza danych została utworzona od nowa, bez żadnych tabel.
Guilherme Ferreira,
33

Jak zostało powiedziane, musisz wcześniej usunąć FK. Na MySQL zrób to w ten sposób:

ALTER TABLE `table_name` DROP FOREIGN KEY `id_name_fk`;

ALTER TABLE `table_name` DROP INDEX `id_name_fk`;
Wellington Lorindo
źródło
1
Twoja odpowiedź naprawdę mi pomogła. DROP FOREIGN KEY rozwiązało problem. Dzięki
Ram Babu S,
1
To również rozwiązało mój problem, ale ten sam skrypt pracował nad moim deweloperskim MySQL. Czy to się zmieniło w wersji MySQL?
Bancarel Valentin
24

Dla tych, którzy dostają się do tego pytania przez Google ... ten błąd może się również zdarzyć, jeśli spróbujesz zmienić nazwę pola, które działa jako klucz obcy.

Dave C.
źródło
13

Aby ominąć to w PHPMyAdmin lub w MySQL, najpierw usuń ograniczenie klucza obcego przed zmianą nazwy atrybutu.

(Dla użytkowników PHPMyAdmin: Aby usunąć ograniczenia FK w PHPMyAdmin, wybierz atrybut, a następnie kliknij „widok relacji” obok „widoku wydruku” na pasku narzędzi poniżej struktury tabeli)

LazerSharks
źródło
1
Myślę, że to najdokładniejsza odpowiedź
MontrealDevOne
4

Jeśli próbujesz usunąć kolumnę, która jest KLUCZEM OBCYM, musisz znaleźć poprawną nazwę, która nie jest nazwą kolumny. Np .: Jeśli próbuję usunąć pole serwera w tabeli Alarmy, które jest kluczem obcym do tabeli serwerów.

  1. SHOW CREATE TABLE alarm; Poszukaj CONSTRAINT `server_id_refs_id_34554433` FORIEGN KEY (`server_id`) REFERENCES `server` (`id`)linii.
  2. ALTER TABLE `alarm` DROP FOREIGN KEY `server_id_refs_id_34554433`;
  3. ALTER TABLE `alarm` DROP `server_id`

Spowoduje to usunięcie serwera kluczy obcych z tabeli Alarmy.

Bonnie Varghese
źródło
4

Miałem ten problem, dotyczy klucza obcego

Kliknij Relation View(jak na poniższym obrazku), a następnie znajdź nazwę pola, które zamierzasz usunąć, a pod Foreign key constraint (INNODB)kolumną po prostu ustaw zaznaczenie na nic! Oznacza brak klucza obcego

wprowadź opis obrazu tutaj

Mam nadzieję, że to zadziała!

Mohammad Kermani
źródło
0

Jeśli dodajesz klucz obcy i napotkasz ten błąd, może to oznaczać, że wartość z tabeli podrzędnej nie występuje w tabeli nadrzędnej.

Powiedzmy, że kolumna, do której ma zostać dodany klucz obcy, ma wszystkie wartości ustawione na 0, a wartość nie jest dostępna w tabeli, do której się odwołujesz.

Możesz ustawić jakąś wartość, która jest obecna w tabeli nadrzędnej, a następnie dodanie klucza obcego zadziałało dla mnie.

StateLess
źródło