按需要在 JDBC 中创建的顺序对外键关系进行排序
Posted
技术标签:
【中文标题】按需要在 JDBC 中创建的顺序对外键关系进行排序【英文标题】:Sorting foreign key relations in the order they need to be created in JDBC 【发布时间】:2020-12-22 02:15:24 【问题描述】:我正在为大学编写一个工具,它应该采用 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的String-Arrays的ArrayList,包含有外键约束的列和引用它的表+列。
【问题讨论】:
【参考方案1】:或者,您可以使用主键创建所有表。
然后,您可以使用alter table add constraint
以任意顺序将外键约束添加到表中。
【讨论】:
如果我找不到更优雅的解决方案,这可能就是我要做的。谢谢 这种方法也可能会更快。 我可能会采用这个答案的方法,但是,仅供参考,另一种方法是设置约束DEFERRABLE
。请参阅这个类似的问题,How do I disable referential integrity in Postgres 8.2?。请参阅 Postgres 中的 CREATE TABLE
命令。以上是关于按需要在 JDBC 中创建的顺序对外键关系进行排序的主要内容,如果未能解决你的问题,请参考以下文章