Я создал файл 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
) REFERENCESusers
(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 ухаживает за манерами, чтобы справиться с ограничениями, тогда как попытка импортировать файл дампа с помощью командной строки не делает этого.
Показать ваши таблицы 'users' please – Jens
Таблица« пользователи »не существует, когда команда CREATE TABLE' my_table' ... запущена, так почему вы хотите это увидеть? – JoeTidee
Вы создаете внешний ключ для этой таблицы, так что он существует – Jens