Jaki warunek musi spełniać kolumna, na której w MySQL (silnik InnoDB) definiuje się klucz obcy?
NULL w kluczu obcym jest dozwolone i oznacza brak powiązania, chyba że dodano NOT NULL.REFERENCES, a nie zgodność nazw kolumn.Klucz obcy porównuje wartości z kolumną w tabeli nadrzędnej, dlatego obie kolumny muszą mieć zgodne typy danych. Jeśli klasy.id ma typ INT UNSIGNED, to uczniowie.klasa_id też musi być INT UNSIGNED. Przy niezgodności, np. INT i VARCHAR, MySQL odrzuci utworzenie klucza obcego błędem.
Na egzaminie praktycznym taki błąd zdarza się często przy imporcie tabel z różnych źródeł. Wymagania InnoDB dla liczb całkowitych są ścisłe: zgodny rozmiar i znak, więc INT i BIGINT albo INT i INT UNSIGNED nie zostaną połączone. Kolumna wskazywana musi mieć indeks, zwykle jest kluczem głównym. Kolumna klucza obcego dostaje indeks automatycznie.
Każda błędna odpowiedź przenosi na klucz obcy cechę klucza głównego albo nakłada niepotrzebne ograniczenie. Unikalność dotyczy kolumny wskazywanej, a nie wskazującej. W tabeli uczniowie ta sama wartość klasa_id powtarza się u wszystkich uczniów jednej klasy i na tym polega relacja jeden do wielu.
Wartość NULL w kluczu obcym jest dozwolona, chyba że projektant doda NOT NULL. Oznacza wtedy brak powiązania, np. pracownika jeszcze bez przypisanego działu. Integralność referencyjna sprawdza tylko wartości różne od NULL.
Nazwy kolumn mogą się różnić, i zwykle tak jest: klasa_id w tabeli uczniowie wskazuje na id w tabeli klasy. Połączenie wyznacza zapis FOREIGN KEY (klasa_id) REFERENCES klasy (id), a nie zgodność nazw.
Jeśli MySQL zgłasza błąd 150 albo „Foreign key constraint is incorrectly formed”, najpierw porównaj typy obu kolumn, łącznie z UNSIGNED.