将数据插入表和完整性

时间:2015-04-10 23:54:11

标签: sql oracle sql-insert data-integrity

这是我的第一篇文章,所以请原谅我有任何明显或简单的问题,因为我对编程很新,所有项目都是我的第一个。 我目前正在开发我的第一个数据库项目。使用Oracle sql的关系数据库。我是我的新课程,所以我还不确定所有的概念,但是要努力。 我使用了一些建模软件来帮助我构建一个13表数据库。我已经设置了所有列,并为所有13个表分配了主键和外键。我现在要做的是在每个表中插入10行测试数据。我已完成父表,但对子表感到困惑。当我为所有父表主键分配ID号时,是否会同时填充子表外键? 我还没有使用序列,因为我不是100%如何使它们工作,而是输入我自己的值,如100,101,102等。我知道这些值需要在外键中,但不会手动将它们插入许多表会让人困惑吗? 是否有更容易的方法或我是否使过程复杂化? 我稍后需要使用一些查询,但我只是想对数据是合理的感到高兴。 谢谢你的帮助 罗布

2 个答案:

答案 0 :(得分:0)

不,子表数据不会自动填充 - 如果有子表,则表示两者之间存在0或1到m的关系。父表中的一行可能在子表中有0行,或者可能有几十行,因此无法自动填充任何内容。

如果要手动分配主键值,则在将数据插入子表时,需要对与外键值相同的值进行硬编码。在现实世界中,您不会一次手动将数据插入到多个表中,您将有一个应用程序执行此操作,并且根据传入的参数或获取currval的内容知道要使用的键。用于在插入父表后填充主键的序列。

答案 1 :(得分:0)

外键的数据必须存在于父表中,而不是相反。 如果你想创建测试数据,我建议你使用类似下面的查询。

insert into child_table(fk_column,column1,column2....)
select pk_column,'#dummy_value1#','#dummy_value2#',..
from parent_table

如果父级有10行,则会在子级中添加10行。 如果您想要更多行,例如您需要复制父数据的每个父值为100。用于查询以下的用途。

insert into child_table(fk_column,column1,column2....)
select pk_column,'#dummy_value1#','#dummy_value2#',..
from parent_table 
join (select level from dual connect by level<10)

这将为10个父值添加100个子值..

相关问题