Существуют условия, которые должны быть выполнены для внешнего ключа:
Вы должны использовать механизм хранения InnoDB в обеих таблицах.
Типы данных должны быть одинаковыми в обеих таблицах. Например. VARCHAR (250) не идентичен VARCHAR (255).
Для столбцов в родительской таблице должно быть ограничение PRIMARY KEY или UNIQUE.
Ваш внешний ключ должен объявлять те же столбцы в том же порядке, что и в ограничениях PRIMARY KEY или UNIQUE в родительской таблице. Это ваша наиболее вероятная проблема.
Так, например, если это ваша родительская таблица:
CREATE TABLE PhoneModels (
make VARCHAR(255),
model VARCHAR(255),
PRIMARY KEY (make, model)
);
Следующее будет неправильным, поскольку первичный ключ имеет два столбца, но каждый внешний ключ имеет один столбец.
CREATE TABLE Handsets
(
...
make VARCHAR(255),
model VARCHAR(255),
FOREIGN KEY (make) REFERENCES PhoneModels(make), // WRONG
FOREIGN KEY (model) REFERENCES PhoneModels(model) // WRONG
);
Так не работает; у вас должен быть один внешний ключ, который ссылается на оба столбца.
CREATE TABLE Handsets
(
...
make VARCHAR(255),
model VARCHAR(255),
FOREIGN KEY (make, model) REFERENCES PhoneModels(make, model), // RIGHT
);