Как через information_schema найти внешние ключи, ссылающиеся на таблицу или колонку
Зачем знать обратные ссылки по FK
Перед переименованием таблицы, сменой типа колонки или вырезанием блока данных из старого проекта на 1С‑Битрикс нужно понять не только «куда мы сами ссылаемся», но и кто на нас полагается. В MySQL и MariaDB эту картину быстрее всего собирают из представления INFORMATION_SCHEMA.KEY_COLUMN_USAGE.
Все внешние ключи, указывающие на заданную таблицу
Подставьте имя схемы и целевую таблицу (например, кастомную или одну из крупных b_* после уточнения по дампу):
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = DATABASE()
AND REFERENCED_TABLE_NAME = 'b_sale_order'
ORDER BY TABLE_NAME, COLUMN_NAME;Если хотите указать базу явно строкой:
-- замените site_db и целевую таблицу
SELECT TABLE_NAME, COLUMN_NAME, CONSTRAINT_NAME,
REFERENCED_TABLE_NAME, REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = 'site_db'
AND REFERENCED_TABLE_NAME = 'b_iblock_element';
Поиск по конкретной колонке
Когда важно, кто ссылается именно на some_col в целевой таблице (например, после объединения дублирующих столбцов в миграции):
SELECT
TABLE_NAME,
COLUMN_NAME,
CONSTRAINT_NAME,
REFERENCED_TABLE_NAME,
REFERENCED_COLUMN_NAME
FROM INFORMATION_SCHEMA.KEY_COLUMN_USAGE
WHERE REFERENCED_TABLE_SCHEMA = DATABASE()
AND REFERENCED_TABLE_NAME = 'b_sale_order'
AND REFERENCED_COLUMN_NAME = 'ID'
ORDER BY TABLE_NAME;Столбец REFERENCED_* в фильтре — это ваш «якорь» в родительской таблице.
Комментарий для эксплуатации Битрикса
В типовых инсталляциях связь между сущностями частично задаётся на уровне приложения без жёстрого FK во всех связях, поэтому пустой результат запроса ещё не значит, что удаление строк «безопасно»: проверьте связи через ORM‑модели, HL‑блоки и кастомные таблицы. Зато где FK реально созданы (часть модулей, обменов, пользовательские миграции), этот метод экономит часы перебора SHOW CREATE TABLE.
Итог
Два шаблонных запроса к KEY_COLUMN_USAGE покрывают «кто держится за нашу таблицу» и «за наш столбец» — перед ALTER, переливкой дампа между стендами или вычищением устаревшей модульной схемы рядом с ядром Битрикс.
Не хотите копаться сами?
Починю за 1-3 дня. Без предоплаты — оплата по результату.
15+ лет опыта с 1С-Битрикс · Без предоплаты · 7 дней гарантии