Вы получите ошибку, и ничего не будет вставлено.
Чтобы найти все несогласованные строки (предположим, что A
и B
- это таблицы назначения, A.id
- это родительский ключ, а B.fk_id
- это дочерний, внешний ключ, идентификатор):
SELECT B.fk_id
FROM B
LEFT JOIN A ON A.id = B.fk_id
WHERE A.id IS NULL
После его выполнения у вас будут все дочерние строки, которые ссылаются на «никуда».Поэтому вам нужно либо удалить их, либо изменить, указав на существующие строки, либо установить B.fk_id
в NULL
(если нет ограничения NOT NULL
).
И после того, как этот запрос вернет 0 строк, выможет безопасно создавать ограничения внешнего ключа без каких-либо магических опций.