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

Tai*_*red 44 mysql foreign-keys mysqldump data-import

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

set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 1;
Run Code Online (Sandbox Code Playgroud)

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

Phi*_*oss 47

MySQL 5.0.51中包含的mysqldump命令(根据4.1.1以来的更改日志版本)确实关闭了外键检查.默认情况下,mysqldump在转储文件的顶部包含以下行:

/*!40014 SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0 */;
Run Code Online (Sandbox Code Playgroud)

mysqldump语法是有条件的评论将在MySQL 4.0.14和以后执行.旧的外键检查设置将在转储文件的末尾恢复:

/*!40014 SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS */;
Run Code Online (Sandbox Code Playgroud)

  • 这是怎么回答这个问题的?Tai说他在文件中收到这些评论的错误,那问题怎么解决了? (13认同)
  • 这是一个公认的答案?它绝对不符合提出的问题:/ (4认同)
  • 是的,我确实在文件中看到了.另一个试图导入此文件的人在外键行上收到错误,并认为这是由于创建顺序. (3认同)

edt*_*ant 32

谨防.出于某种原因,如果使用--compact选项,mysqldump不会写入FOREIGN_KEY_CHECKS = 0.

再见.

  • 原因是`--compact`包含`--skip-comments`,所以`--compact`应该使用`--skip-add-drop-table --skip-add-locks --skip-disable-键--skip-set-charset` (5认同)
  • 你实际上也可以 - 浏览评论.手册说--compact"启用--skip-add-drop-table, - skip-add-locks, - skip-comments, - skip-disable-keys和--skip-set-charset选项",但显然--compact还删除了一些其他输出 - 例如FOREIGN_KEY_CHECKS语句. (5认同)

ald*_*lds 11

如果在导出SQL时使用phpMyAdmin,请选择" 自定义导出方法".然后在复选框选项中,单击" 禁用外键检查 ".导出的SQL语句将分别在输出文件的开头和结尾处具有禁用和启用外键检查.

它不是"自动的",但您不必为每次导出自己编写语句.

  • 这是因为"更容易"是非常主观的(我不是很有用,例如)并且实际上并没有回答这个问题. (3认同)
  • +1对于PhpMyAdmin用户肯定有用.其他人都可以主观地忽略它,或者极其主观地将其贬低:) (2认同)

iRo*_*nin 8

如果您将其--compact用作mysqldump命令之一,则可能会发生这种情况. --compact包括--skip-comments所以相反--compact应该使用--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset