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)
edt*_*ant 32
谨防.出于某种原因,如果使用--compact选项,mysqldump不会写入FOREIGN_KEY_CHECKS = 0.
再见.
ald*_*lds 11
如果在导出SQL时使用phpMyAdmin,请选择" 自定义导出方法".然后在复选框选项中,单击" 禁用外键检查 ".导出的SQL语句将分别在输出文件的开头和结尾处具有禁用和启用外键检查.
它不是"自动的",但您不必为每次导出自己编写语句.
如果您将其--compact用作mysqldump命令之一,则可能会发生这种情况.
--compact包括--skip-comments所以相反--compact应该使用--skip-add-drop-table --skip-add-locks --skip-disable-keys --skip-set-charset