Skip to content

Ошибка"ERROR 1215 (HY000) at line 28: Cannot add foreign key constraint" в процессе импорта дампа БД

Ошибка \"ERROR 1215 (HY000) at line 28: Cannot add foreign key constraint\" в процессе импорта дампа БД

Причина возникновения ошибки \"Cannot add foreign key constraint\"

Ошибка возникает из-за того, что в процессе импорта дампа создаётся таблица с внешними ключами(foreign keys), ссылающимися на другую таблицу, но эта таблица ещё не была создана, и, при этом у нас включена проверка целостности внешних ключей. Подробности

Для успешного импорта дампа базы данных, при импорте которого возникает подобная ошибка, необходимо на время отключить foreign_key_checks, затем импортировать дамп.

Простой способ решения проблемы

Для этого импортируем дамп в базу в несколько шагов:

  1. отключаем проверку целостности внешних ключей
    mysql>  set foreign_key_checks=0;
    Query OK, 0 rows affected (0.00 sec)
    
  2. импортируем дамп
    mysql> source db1.sql;
    Query OK, 0 rows affected, 1 warning (0.00 sec)
    Query OK, 56 rows affected (0.04 sec)
    Records: 56  Duplicates: 0  Warnings: 0
    ...
    mysql>
    
  3. возвращаем значение назад
mysql>  set foreign_key_checks=1;
Query OK, 0 rows affected (0.00 sec)

где db1.sql — дамп импортируемой базы данных.

То же самое, но без консоли mysql

Открываем дамп в vim, в начало добавляем set foreign_key_checks=0;, в конец set foreign_key_checks=1;. Импортируем дамп.

Сложный способ

С помощью vim/less изучаем дамп. Определяем, где какая таблица в дампе расположена. Ищем таблицы с foreign keys. Таблицы, на которые ссылаются эти ключи, перемещаем наверх, выше таблицы, внешние ключи которой ссылаются на перемещаемую таблицу. Импортируем модифицированный дамп. Если всё сделали корректно, импорт проходит без возникновения упомянутой выше ошибки.