Когда я выполняю команду mysqldump на своей базе данных и затем пытаюсь импортировать ее, она перестала работать, поскольку она пытается составить таблицы в алфавитном порядке, даже при том, что у них может быть внешний ключ, который ссылается на таблицу позже в файле. Кажется, нет ничего в документации, и я нашел ответы как это, в которых говорится для обновления файла после того, как это создается для включения:
set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;
Там никакой путь не состоит в том, чтобы автоматически установить те строки или экспортировать таблицы в необходимом порядке (не имея необходимость вручную указывать все имена таблиц, поскольку это может быть утомительно и подвержено ошибкам)? Я мог перенести те строки в сценарий, но задавался вопросом, существует ли простой способ гарантировать, что я могу вывести файл и затем импортировать его, вручную не обновляя его.
Команда mysqldump
, включенная в MySQL, начиная с версии 4.1.1 по умолчанию создает сценарий, который отключает проверки внешнего ключа. Следующая строка включена в верхнюю часть файла дампа:
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
Синтаксис / *! 40014 ... * /
- это условный комментарий , который будет выполняться в версии MySQL. 4.0.14 и новее. Старая настройка проверки внешнего ключа восстанавливается к концу файла дампа:
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
Обратите внимание, что условные комментарии интерпретируются клиентом (а не сервером). Если вы загрузите файл дампа с помощью клиента, который их не поддерживает, проверка внешнего ключа не будет отключена, и вы можете столкнуться с ошибками. Для достижения наилучших результатов я предлагаю загружать файлы дампа с помощью официального клиента командной строки mysql:
mysql -hserver -uuser -p database < dumpfile.sql
Также стоит отметить, что если mysqldump
запускается с параметром - compact
, тогда команды для отключения и повторного включения проверок внешнего ключа не включаются в файл дампа.