2

有什么方法可以查询数据字典以按应填充的顺序获取表列表。

我有一个项目,我正在对大量表进行批量插入,如果我可以获得按填充顺序排序的表列表,那将非常有帮助。

我的具体用例是 MySql,但如果这个功能也存在于 Oracle、MS SqlServer 等中会很有趣。

编辑:例如,如果我创建这些表(伪代码)

person_type (
  person_type_id
);

person (
  person_id,
  person_type_id references person_type.person_type_id
);

address (
  address_id,
  street1,
  street2,
  city,
  state,
  zip
);

person_address (
  person_id references person_id
  address_id references address.address_id
);

我希望排序顺序是这样的:

0 地址

0 个人类型

1人

2 个人地址

  • address 没有依赖项,因此可以先填充(排序等级 = 0)
  • person_type 没有依赖项,因此也可以先填充(排序等级 = 0)
  • person 取决于 person_type,因此在创建适当的 person_type 记录之前无法填充它(排序等级 = 1)
  • person_address 取决于 person_type、person 和 address,因此只有在这些表中存在记录后才能填充它(排序等级 = 2)
4

1 回答 1

0

我最终转储了只包含结构而不包含数据的数据库。这些表需要以我正在寻找的相反顺序创建(即在一个表可以创建另一个表的外键之前,必须首先创建另一个表)因此创建表语句将按相反的顺序我想。然后我运行这个 grep 以按照我想要的顺序获取创建语句。

tac dump.sql | grep -i "create table" dump.sql | tac > tableNames2.txt

后来进行了一些全局搜索和替换,我得到了我正在寻找的东西。

我还在导入期间关闭了外键约束,并在导入结束时将它们重新打开:

set foreign_key_checks = 0
set foreign_key_checks = 1
于 2016-01-15T21:29:49.197 回答