Przyczyny błędu ERROR 1005 (HY000) Can’t create table (errno: 150) w MySQL

Pojawiający się podczas próby dodania do bazy danych tabeli błąd “Can’t create table (errno: 150)” związany jest ze zdefiniowanymi w niej kluczami obcymi. MySQL sprawdza poprawność klucza obcego, porównując go z kluczem obcym w tabeli z którą tworzy relację. Ważne jest żeby tabela do której odnosi się klucz obcy istniała, a pole na które  wskazuje, było dokładnie identyczne z polem wskazującym. Poniżej znajduje się lista potencjalnych przyczyn wystąpienia błędu wraz z rozwiązaniami.

  • Tabela do której referuje klucz obcy nie istnieje

Zdarza się to najczęściej podczas importu całej bazy zawierającej wiele tabel. Tabela do której odnosi się klucz obcy w importowanej w danej chwili tabeli, mogla nie zostać jeszcze utworzona, mimo iż znajduje się w tym samym importowanym pliku. Możemy wtedy albo zmienić kolejność ich importowania (importować po jednej tabeli lub grupie tabel), albo wyłączyć na czas wykonywania importu sprawdzanie poprawności kluczy obcych, co sprowadza się do umieszczenia na początku pliku ze zrzutem linii:

SET FOREIGN_KEY_CHECKS = 0;

Na końcu pliku zrzutu ponownie włączamy sprawdzanie poprawności kluczy dodając tam linię:

SET FOREIGN_KEY_CHECKS = 1;
  • Typy danych kluczy nie są identyczne

Warto zauważyć, że przykładowo int(10) i int(11) to dla MySQL zupełnie inne typy. Pozostaje sprawdzić typy danych w odpowiednich tabelach i je poprawić.

  • Tylko w jednym z pary kluczy typ danych jest Unsigned

To także nie przejdzie. Oba z pary kluczy muszą być identycznie zadeklarowane jako przechowujące wartości albo ze znakiem, albo bez znaku.

Leave a Reply

Your email address will not be published. Required fields are marked *