首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >您能自动创建一个不强制外键约束的mysqldump文件吗?

您能自动创建一个不强制外键约束的mysqldump文件吗?
EN

Stack Overflow用户
提问于 2010-03-12 08:17:51
回答 4查看 44.8K关注 0票数 51

当我在我的数据库上运行mysqldump命令,然后尝试导入它时,它会失败,因为它试图按字母顺序创建表,即使它们可能有一个外键引用了文件中稍后的表。在documentation中似乎没有任何东西,我找到了像this这样的答案,它说要在创建文件后更新它,以包括:

代码语言:javascript
运行
复制
set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-03-12 08:34:48

默认情况下,从4.1.1版本开始随MySQL一起提供的mysqldump命令会生成一个关闭外键检查的脚本。在转储文件的顶部附近包含以下行:

代码语言:javascript
运行
复制
/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;

/*!40014 ... */语法是将在MySQL版本4.0.14及更高版本上执行的conditional comment。在转储文件末尾恢复旧的外键检查设置:

代码语言:javascript
运行
复制
/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;

注意,条件注释是interpreted by the the client (而不是服务器)。如果使用不支持外键检查的客户机加载转储文件,则不会禁用外键检查,并且可能会遇到错误。为了获得最佳效果,我建议使用官方的mysql命令行客户端加载转储文件:

代码语言:javascript
运行
复制
mysql -hserver -uuser -p database < dumpfile.sql

还值得注意的是,如果使用--compact选项运行mysqldump,那么将从转储文件中省略禁用和重新启用外键检查的命令。

票数 60
EN

Stack Overflow用户

发布于 2013-03-26 04:59:28

当心。由于某些原因,如果使用-- FOREIGN_KEY_CHECKS=0选项,mysqldump就不会写入压缩文件。

再见。

票数 38
EN

Stack Overflow用户

发布于 2015-05-06 01:23:33

如果您将--compact用作mysqldump命令之一,则可能会发生这种情况。--compact包含--skip-comments,因此--compact应该使用--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2429655

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档