一尘不染

您可以自动创建不强制执行外键约束的mysqldump文件吗?

mysql

当我在数据库上运行mysqldump命令并尝试将其导入时,它会失败,因为它尝试按字母顺序创建表,即使它们可能具有稍后在文件中引用表的外键。似乎没有成为任何东西的文档,我已经找到答案,像这样是说,它的创建后,包括更新文件:

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

有没有办法自动设置这些行或以必要的顺序导出表(而不必手动指定所有表名,因为这可能很乏味且容易出错)?我可以将这些行包装在脚本中,但是想知道是否有一种简单的方法来确保我可以转储文件然后导入而无需手动更新。


阅读 378

收藏
2020-05-17

共1个答案

一尘不染

mysqldump自默认版本4.1.1起,MySQL附带的命令默认会生成一个脚本,该脚本关闭外键检查。转储文件顶部附近包含以下行:

/*!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选项运行,则转储文件中将省略禁用和重新启用外键检查的命令。

2020-05-17