Внешние ключи являются своего рода ограничением , поэтому они могут только завершиться с ошибкой при попытке добавить записи.
Вы можете выполнить то, что вы описываете, с помощью триггера. Я не знаю синтаксис MySql, но в SQL Server это будет выглядеть примерно так:
CREATE TRIGGER TR_ensure_user_interest ON interest FOR INSERT, UPDATE AS
BEGIN
INSERT user_interest (user_id, interest_id)
SELECT user_id, interest_id
FROM inserted
,user
EXCEPT (SELECT user_id, interest_id)
END
Обратите внимание, что это довольно неэффективный подход, но он должен охватывать многие случаи, которые вас беспокоят.
ОБНОВЛЕНИЕ: Я согласен с другими, которые наблюдали здесь "запах" конструкции. Если вы можете достичь требуемого результата с помощью запросов JOIN, это будет гораздо более эффективным решением. Однако я пытался ответить на фактически заданный вопрос. (Кроме того, я был в такой ситуации, когда физические записи полезны для других пользователей базы данных, которые не разбираются в сложных запросах.)