Ваше мышление неверно.
Нет волшебников c, которые заполняют столбцы внешнего ключа.
Когда эти столбцы были добавлены, им было присвоено значение NULL (из-за DEFAULT Предложение NULL в определениях столбцов.)
В InnoDB ограничение внешнего ключа запрещает присвоение недопустимых значений столбцу внешнего ключа. Ограничение внешнего ключа для prof_id
(в таблице my_contacts
) говорит о том, что любое значение, присвоенное этому столбцу , должно появляться как значение в столбце prof_id
хотя бы одной строки в profession
Таблица.
Внешний ключ (как определено, как показано в вопросе), по умолчанию ON UPDATE NO ACTION ON DELETE NO ACTION
.
И значение по умолчанию NO ACTION
эквивалентно указанию RESTRICT
. Это означает, что если в таблице my_contacts
есть какие-либо строки со значениями prof_id
, которые ссылаются на строку в таблице profession
, то попытка УДАЛИТЬ указанную строку из таблицы profession
приведет к ошибке. Кроме того, любая попытка изменить значение столбца prof_id
указанной строки в profession
приведет к ошибке. Эти действия будут нарушать правила, установленные ограничением внешнего ключа.
Связь между строками устанавливается путем сохранения общего значения в столбце prof_id
двух таблиц. Хранение ненулевого значения в столбце prof_id
связывает строку в my_contacts
со строкой в profession
.
Ограничение внешнего ключа предотвращает назначение недопустимых значений и предотвращает изменения строки в родительской таблице profession
, которые могут привести к нарушению установленных отношений.
Ограничение внешнего ключа не вызывает автоматическое присвоение значений c для замены значений NULL в prof_id
столбец.