Похоже, что вам не хватает некоторых Ограничений внешнего ключа .
В зависимости от параметра ON DELETE
потерянные записи будут удаляться вместе со ссылками на записи, ссылки на столбцы которых установлены на NULL
, илиудаление будет отклонено.
Вам нужно будет удалить эти существующие записи вручную, используя запрос, подобный этому, перед созданием ограничений:
DELETE FROM table_a
WHERE ref_b IS NOT NULL
AND NOT EXISTS ( SELECT 1 FROM table_b WHERE table_b.id = table_a.ref_b )