首页 > 解决方案 > 按需要在 JDBC 中创建的顺序对外键关系进行排序

问题描述

我正在为大学编写一个工具,它应该采用 MySQL 数据库并将其复制到 PostgreSQL 数据库中,反之亦然。

我现在已经阅读了关于 Java 对象的表/列的所有相关信息,现在想开始创建我的创建语句,但是我有一个小问题。

如果一个表使用外键关系引用其他表,则需要在该表之前创建这些其他表,否则 DBMS 将抛出错误。所以我必须以某种方式找到一种方法来对我的表对象进行排序,无论是在我的 Java 代码中还是通过使用巧妙的 SQL 查询。

我尝试在原始表中使用它们的创建顺序:

USE project;
SELECT create_time, table_name FROM INFORMATION_SCHEMA.TABLES WHERE table_schema = 'project';

输出

但是,这只会输出精确到秒的创建时间,如果它们都是使用脚本创建的,这对我没有帮助。

这就是我存储表格的方式:

public Table(String name, Column[] columns, ArrayList<String> primaryKeys, ArrayList<String[]> foreignKeys) {
    this.name = name;
    this.columns = columns;
    this.primaryKeys = primaryKeys;
    this.foreignKeys = foreignKeys;
}

外键属性是长度为 3 的字符串数组的 ArrayList,包含具有外键约束的列和引用它的表 + 列。

标签: javamysqlsqljdbc

解决方案


或者,您可以使用它们的主键创建所有表。

然后,您可以使用alter table add constraint以任何顺序将外键约束添加到表中。


推荐阅读