我正在做一个应该在删除后恢复数据库的程序,但只有一部分 - 用户想要的表,不关心其他人。我有两个arraylists。
我需要生成的所有表格 - 用户想要的表格以及与此表格相关的其他表格(所有图表)
此表之间的所有关系 问题是创建和填充表以保持数据一致性的顺序。
现在,我的算法是:
生成没有任何关系的“免费”表格(如果有的话)
仅使用PrimaryKey生成此表(如果有)
尝试使用ForeignKey生成表格。
如何检查我是否可以使用ForeignKeys在表中生成数据?我需要知道使用ForeignKeys生成表的顺序。如何有效地做到这一点?我用Java写作。
答案 0 :(得分:1)
有两个简单的解决方案:
以您想要的任何顺序创建没有外键的表,然后使用alter table
语句添加外键。
以任意顺序遍历表格列表并创建您现在可以创建的所有表格,因为它们的参考表已经存在(您必须在列表中将它们标记为已创建,并且您有第二个列表要检查所需的关系)。重复该循环,直到您创建所有表(或直到您没有在运行中创建任何表,而不是在列表中缺少必需的表)。您也可以使用它来模拟它:如果您运行此循环(不创建表,只需在列表中标记它),您可以检查您的用户是否已选择所有必需的表(或根据用户标记所有必需的表)他的选择)。
如果您也想插入数据:
set @@foreign_key_checks = 0; <insert all your data in any order>; set @@foreign_key_checks = 1;
。这将允许您以任何顺序插入数据,即使参考数据尚不存在。不幸的是,当您重新启用它时(例如,如果您错过了某些数据),将不会进行最终检查,因此请谨慎使用。