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ąSHOWCREATETABLEponieważ Query Browser czasami pokazuje wizualnie tylkoINTEGERdla obuINT(10)iINT(11). Powinieneś również sprawdzić, czy nie jest onSIGNEDa 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
MyISAMstół. Aby używać kluczy obcych, obie tabele muszą byćInnoDB. (Właściwie, jeśli obie tabele toMyISAMwtedy nie otrzymasz komunikatu o błędzie – po prostu nie utworzy klucza.) W przeglądarce zapytań możesz określić typ tabeli. - Podałeś kaskadę
ONDELETESETNULL, ale odpowiednie pole klucza jest ustawione naNOTNULL. Możesz to naprawić, zmieniając kaskadę lub ustawiając pole tak, aby zezwalało naNULLwartoś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
ALTERoś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