当前位置: 首页 > 面试题库 >

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

鲜于河
2023-03-14
问题内容

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

set FOREIGN_KEY_CHECKS = 0;
...original mysqldump file contents...
set FOREIGN_KEY_CHECKS = 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选项运行,则转储文件中将省略禁用和重新启用外键检查的命令。



 类似资料:
  • 问题内容: 在下表中输入值时,如何在SQL的同一表的列上强制使用外键约束: 员工人数 : 空号, 经理编号(必须是现有员工) 问题答案: 希望能帮助到你!

  • 本文向大家介绍MySQL中外键的创建、约束以及删除,包括了MySQL中外键的创建、约束以及删除的使用技巧和注意事项,需要的朋友参考一下 前言 在MySQL 3.23.44版本后,InnoDB引擎类型的表支持了外键约束。 外键的使用条件: 1.两个表必须是InnoDB表,MyISAM表暂时不支持外键(据说以后的版本有可能支持,但至少目前不支持); 2.外键列必须建立了索引,MySQL 4.1.2以后

  • 我在创建mysql数据库中现有表的外键时遇到了一些问题。 我不想创建一个名为的新表来引用它,使用以下方法: 但我发现了错误: 为了获得更多的信息,我做了: 在我看来,这两个列的类型似乎是匹配的,因为它们都是varchar(45)。(我还尝试将列设置为not null,但这没有解决问题)所以我猜问题一定是。但我不太清楚这意味着什么,也不知道如何检查/修复它。有人有什么建议吗?是什么意思?

  • 我试图在两个表之间创建一个外键约束,但在执行alter命令之后,mysql创建了索引而不是外键。 我使用的是hibernate,所以最初我认为这是hibernate的问题,但当我直接在mysql上执行查询时,行为是一样的。 更改表person添加约束FK9ircw28d19mdg5pu8yfg1qs8p外键(Address_Id)引用地址(Address_Id) 运行此命令后,我会在mysql数据

  • 表a已成功创建... 错误1215(HY000):无法添加外键约束 无法创建表b

  • mysql 5.7 外键约束 主表:部门表 从表:员工表 添加外键:从表 dep_id 关联 主表 id >[danger] CASCADE > 级联更新 主表数据更新从表会更新外键 级联删除 主表数据删除,从表会一起删除