创建和填充表的顺序

时间:2016-06-22 08:43:59

标签: java mysql database

我正在做一个应该在删除后恢复数据库的程序,但只有一部分 - 用户想要的表,不关心其他人。我有两个arraylists。

  1. 我需要生成的所有表格 - 用户想要的表格以及与此表格相关的其他表格(所有图表)

  2. 此表之间的所有关系 问题是创建和填充表以保持数据一致性的顺序。

  3. 现在,我的算法是:

    1. 生成没有任何关系的“免费”表格(如果有的话)

    2. 仅使用PrimaryKey生成此表(如果有)

    3. 尝试使用ForeignKey生成表格。

    4. 如何检查我是否可以使用ForeignKeys在表中生成数据?我需要知道使用ForeignKeys生成表的顺序。如何有效地做到这一点?我用Java写作。

1 个答案:

答案 0 :(得分:1)

有两个简单的解决方案:

  • 以您想要的任何顺序创建没有外键的表,然后使用alter table语句添加外键。

  • 以任意顺序遍历表格列表并创建您现在可以创建的所有表格,因为它们的参考表已经存在(您必须在列表中将它们标记为已创建,并且您有第二个列表要检查所需的关系)。重复该循环,直到您创建所有表(或直到您没有在运行中创建任何表,而不是在列表中缺少必需的表)。您也可以使用它来模拟它:如果您运行此循环(不创建表,只需在列表中标记它),您可以检查您的用户是否已选择所有必需的表(或根据用户标记所有必需的表)他的选择)。

如果您也想插入数据:

  • 在使用第一种方法更改表之前添加数据
  • 在创建表格时添加数据
  • 按照与第二种方法相同的顺序添加数据
  • 使用set @@foreign_key_checks = 0; <insert all your data in any order>; set @@foreign_key_checks = 1;。这将允许您以任何顺序插入数据,即使参考数据尚不存在。不幸的是,当您重新启用它时(例如,如果您错过了某些数据),将不会进行最终检查,因此请谨慎使用。