Я пытался добавить ссылку на два столбца birth_country_id и home_country_id, которые связаны с таблицей countries.
Когда я выполняю следующий запрос, он выдает ошибку #1215 - Cannot add foreign key constraint
ALTER TABLE `users`
ADD CONSTRAINT `users_country_ids_foreign`
FOREIGN KEY
(`home_country_id`, `birth_country_id`)
REFERENCES `countries`(`id`, `id`)
ON DELETE SET NULL ON UPDATE NO ACTION;
PS: этот запрос автоматически генерируется PhpMyAdmin.
Что я делаю неправильно?






в этом случае вы можете попробовать добавить 2 отдельных ограничения для каждого столбца.
Вам нужно сгенерировать два отдельных внешних ключа. Вы хотите индивидуально проверить, существует ли страна, которую вы указали в home_country_id, и существует ли страна, которую вы указали в birth_country_id.
MySQL не поддерживает использование одного и того же столбца в индексе более одного раза (это техническая причина, по которой ваш оператор не работает), но если было бы будет разрешено, ваш внешний ключ будет проверять, что home_country_id и birth_country_id равны, что, вероятно, не то, что вы хотите выразить.
Значит, данные в таблицы помещать? Или это слишком очевидное решение? :П
@OzanKurt Я не понимаю, что вы имеете в виду. Вам не нужны данные в ваших таблицах для добавления внешнего ключа, хотя, если у вас есть данные в users, вам также понадобятся страны, которые присваиваются всем вашим пользователям. Если у вас есть внешний ключ, а затем вставьте / обновите пользователя, например, home_country_id = 1, MySQL отклонит это, если у вас нет строки в таблице countries с id=1. (Но опять же, я не уверен, что вы имели в виду, или вы этого знаете.) Здесь важно следующее: вам нужны два отдельных ограничения, а не одно с двумя столбцами.
Да, я так и думал. : D Ошибка, которую я получал, была без столбцов. Вместо этого я сделал (col1, col2) ссылки (ref1, ref2). Так что, если вы можете обновить ответ, было бы неплохо.
@OzanKurt references (ref1, ref2) - это совсем другая ситуация / вопрос. На него лучше всего можно было бы ответить, если бы вы добавили структуры таблиц (show create table xxx) для своих двух таблиц, а также (неработающий) оператор внешнего ключа в вопрос новый (хотя, вероятно, есть много похожих вопросов для этого более распространенного сценарий). Два наиболее вероятных подозрения: а) у вас нет индекса в целевой таблице, который начинается с (ref1, ref2), или б) типы данных не подходят. (Но, как было сказано ранее, на этот вопрос лучше всего ответить, посмотрев на структуру вашей таблицы).
Дело в том, что у меня нет данных ни в одной из моих таблиц.