Можно ли автоматически создать mysqldump файл, который не осуществляет ограничения внешнего ключа?

Когда я выполняю команду mysqldump на своей базе данных и затем пытаюсь импортировать ее, она перестала работать, поскольку она пытается составить таблицы в алфавитном порядке, даже при том, что у них может быть внешний ключ, который ссылается на таблицу позже в файле. Кажется, нет ничего в документации, и я нашел ответы как это, в которых говорится для обновления файла после того, как это создается для включения:

set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;

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

44
задан Community 23 May 2017 в 11:54
поделиться

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 , тогда команды для отключения и повторного включения проверок внешнего ключа не включаются в файл дампа.

47
ответ дан 26 November 2019 в 21:55
поделиться
Другие вопросы по тегам:

Похожие вопросы: