Kod błędu:1005 — w Twoim kodzie jest nieprawidłowe odniesienie do klucza podstawowego
Zwykle jest to spowodowane odwołaniem do pola klucza obcego, które nie istnieje. Możliwe, że popełniłeś błąd literowy, sprawdź, czy powinien być taki sam, lub występuje niezgodność typu pola. Pola powiązane z kluczem obcym muszą dokładnie odpowiadać definicji.
Niektóre znane przyczyny to:
- Dwa kluczowe pola typu i/lub rozmiaru nie są dokładnie takie same. Na przykład, jeśli jeden to
INT(10)
pole klucza musi mieć wartośćINT(10)
również, a nieINT(11)
lubTINYINT
. Możesz potwierdzić rozmiar pola za pomocąSHOW
CREATE
TABLE
ponieważ Query Browser czasami pokazuje wizualnie tylkoINTEGER
dla obuINT(10)
iINT(11)
. Powinieneś również sprawdzić, czy nie jest onSIGNED
a drugi toUNSIGNED
. Oboje muszą być dokładnie tacy sami. - Jedno z pól klucza, do którego próbujesz się odwołać, nie ma indeksu i/lub nie jest kluczem podstawowym. Jeśli jedno z pól w relacji nie jest kluczem podstawowym, musisz utworzyć indeks dla tego pola.
- Nazwa klucza obcego jest duplikatem już istniejącego klucza. Sprawdź, czy nazwa Twojego klucza obcego jest unikalna w Twojej bazie danych. Po prostu dodaj kilka losowych znaków na końcu nazwy klucza, aby to przetestować.
- Jedna lub obie tabele to
MyISAM
stół. Aby używać kluczy obcych, obie tabele muszą byćInnoDB
. (Właściwie, jeśli obie tabele toMyISAM
wtedy nie otrzymasz komunikatu o błędzie – po prostu nie utworzy klucza.) W przeglądarce zapytań możesz określić typ tabeli. - Podałeś kaskadę
ON
DELETE
SET
NULL
, ale odpowiednie pole klucza jest ustawione naNOT
NULL
. Możesz to naprawić, zmieniając kaskadę lub ustawiając pole tak, aby zezwalało naNULL
wartości. - Upewnij się, że opcje Zestaw znaków i Sortuj są takie same zarówno na poziomie tabeli, jak i na poziomie poszczególnych pól dla kolumn kluczowych.
- Masz wartość domyślną (czyli default=0) w kolumnie klucza obcego
- Jedno z pól w relacji jest częścią klucza złożonego (złożonego) i nie ma własnego indywidualnego indeksu. Mimo że pole ma indeks jako część klucza złożonego, musisz utworzyć oddzielny indeks tylko dla tego pola klucza, aby użyć go w ograniczeniu.
- Masz błąd składni w
ALTER
oświadczenie lub błędnie wpisałeś jedną z nazw pól w relacji - Nazwa twojego klucza obcego przekracza maksymalną długość 64 znaków.
Aby uzyskać więcej informacji, zobacz:Błąd MySQL Numer 1005 Nie można utworzyć tabeli