Java 使用JDBC按引用顺序创建外键和索引

Java 使用JDBC按引用顺序创建外键和索引,java,mysql,jdbc,ddl,Java,Mysql,Jdbc,Ddl,我试图编写一个java应用程序,将表复制到另一个模式 如果我只是在目标模式中使用来自show create table foo_bar的结果,那么如果尚未创建外键的引用表,则会出现错误。因此,我使用DatabaseMetaData构建自己的脚本来创建表,而不使用外键。创建所有表之后,我将添加FKs。这就是麻烦开始的地方 因为我不能(也不想)手动排序这些FK脚本,所以我正在寻找一种方法,根据它们的引用顺序运行它们 有没有一种方法可以按照引用顺序生成这些脚本,也许是一个埋藏在互联网深处的第三方jav

我试图编写一个java应用程序,将表复制到另一个模式

如果我只是在目标模式中使用来自
show create table foo_bar
的结果,那么如果尚未创建外键的引用表,则会出现错误。因此,我使用
DatabaseMetaData
构建自己的脚本来创建表,而不使用外键。创建所有表之后,我将添加FKs。这就是麻烦开始的地方

因为我不能(也不想)手动排序这些FK脚本,所以我正在寻找一种方法,根据它们的引用顺序运行它们

有没有一种方法可以按照引用顺序生成这些脚本,也许是一个埋藏在互联网深处的第三方java库?或者,在程序没有收到任何错误之前,一个接一个地运行所有这些ALTERTABLE脚本是没有出路的吗?解决这个问题的最佳方法是什么


我正在使用
jdbc
连接
mysql
使用
innodb存储引擎
。如果答案也包含其他rdbms的比较信息,我们将不胜感激。

设置唯一检查=0
设置外键检查=0
。如果您知道源数据库是一致的,请在插入目标数据库时执行此操作。您也可以使用mysqldump,它可以(或默认情况下将)将这些语句添加到其输出中。@marekful感谢您的评论,但我在插入数据时没有问题。问题是,我的应用程序不能每次都以正确的顺序更改表,以添加外键。正在寻找按正确顺序创建外键的解决方案。请从源代码将表的mysqldump转储到“file.sql”中。在目标上,执行
myqslfile.sql
。一切都会好的。另外,如果您只想创建表结构(包含所有索引/键),也可以这样做,但要将
--nod data
传递给mysqldump。
mysqldump会在转储输出中自动包含一条语句,以将外键检查设置为0。这避免了必须以特定顺序重新加载表的问题,
并且
这使您能够在转储文件包含外键顺序不正确的表时以任何顺序导入表。
@marekful好吧,我不打算使用转储文件。我更喜欢在java应用程序中构建和运行查询(不要问为什么,我可能会在某个时候添加额外的列),但既然您提到了,我将尝试查看结果。