2016-02-05 5 views
0

Я создал файл SQL с помощью mysqldumnp (с MySQL 5.6.27), и я использовать его повторно создать базу данных (в MySQL 5.7.9):MySQL - не может добавить ограничение внешнего ключа (1215)

CREATE TABLE `my_table` (
    `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, 
    `email` varchar(255) DEFAULT NULL, 
    `user_id` bigint(20) unsigned DEFAULT NULL, 
    PRIMARY KEY (`id`), 
    KEY `user_id` (`user_id`), 
    CONSTRAINT `my_table_ibfk_1` FOREIGN KEY (`user_id`) REFERENCES `users` (`user_id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC; 

Я получаю эту ошибку:

[Err] 1215 - Cannot add foreign key constraint

Я побежал запрос SHOW ENGINE INNODB STATUS и получил следующую форму 'новейшей FOREIGN KEY ERROR' заголовок:

2016-02-05 12:27:08 0x7f1b8f54b700 Error in foreign key constraint of table my_db/my_table: FOREIGN KEY (user_id) REFERENCES users (user_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT: Cannot resolve table name close to: (user_id)) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=COMPACT

Я также попытался запустить эту команду SQL после запуска set FOREIGN_KEY_CHECKS = 0;, но я все равно получаю ту же ошибку.

Это, казалось, показало, что проблема в том, что таблица users должна быть установлена ​​до того, как я смогу запустить этот запрос. Однако у меня есть еще одна часть дампа SQL (перед этой частью), которая имеет ограничение внешнего ключа, которое ссылается на ту же таблицу и столбец - users.user_id - и это выполняется без каких-либо ошибок.

Так что я, 1) путают, почему это происходит и 2) интересно знать, если есть какой-либо метод инструктажа туздЫшпр форматировать файл дампа таким образом, что команды для создания таблицы сначала в файле дампа, и команды, которые добавляют внешние ключи, поступают позже, поэтому обходя проблему с таблицами, которые не существуют.

Примечание: Я также использовал средство Data Tranfer в Navicat для копирования через ту же базу данных, что и файл дампа, и он прошел нормально. Это, по-видимому, указывает на то, что любая рутина Navicat ухаживает за манерами, чтобы справиться с ограничениями, тогда как попытка импортировать файл дампа с помощью командной строки не делает этого.

+0

Показать ваши таблицы 'users' please – Jens

+0

Таблица« пользователи »не существует, когда команда CREATE TABLE' my_table' ... запущена, так почему вы хотите это увидеть? – JoeTidee

+0

Вы создаете внешний ключ для этой таблицы, так что он существует – Jens

ответ

1

Откройте файл резервной копии .sql и переместите SQL-скрипты (создание и вставки) my_table после users и запустите процесс восстановления еще раз.

Таблица user должна существовать до создания внешнего ключа, на который имеется ссылка.

Возможно, у других таблиц будет такая же проблема, убедитесь, что зависимости в таблице в порядке.

+1

Я удивлен, что MySQL дамп не суммирует, добавляет ключ-код в конец файла. – JoeTidee

 Смежные вопросы

  • Нет связанных вопросов^_^