sql - 生成数据到数据库
问题描述
我有一个关于为数据库生成数据的问题。一般来说我没有问题,但我不知道如何生成正确的外键。示例:我有三个表:Factory、Worker 和 Product。表产品有两个外键:到工厂和工人,表工人有工人的主键和工厂的外键,所以如果我首先为产品生成数据,我在工厂和工人之间有链接,那么我现在如何才能与工人约会?
解决方案
如果启用了外键,则必须先插入父记录,然后再插入子记录。
SQL> create table factory
2 (id number primary key);
Table created.
SQL> create table worker
2 (id number primary key,
3 id_fact number references factory
4 );
Table created.
SQL> create table product
2 (id number primary key,
3 id_fact number references factory,
4 id_work number references worker
5 );
Table created.
SQL>
SQL> insert into factory values (1);
1 row created.
SQL> insert into worker values (100, 1);
1 row created.
SQL> insert into product values (1000, 1, 100);
1 row created.
SQL>
你不能 - 正如你所说 -product
首先插入值,因为父行还不存在:
SQL> rollback;
Rollback complete.
SQL> insert into product values (1000, 1, 100);
insert into product values (1000, 1, 100)
*
ERROR at line 1:
ORA-02291: integrity constraint (SCOTT.SYS_C007766) violated - parent key not
found
SQL>
如果您创建了可延迟的外键约束,那么您可以按照您想要的任何顺序插入行,因为 Oracle 将在提交时检查完整性:
SQL> create table factory
2 (id number primary key);
Table created.
SQL> create table worker
2 (id number primary key,
3 id_fact number references factory initially deferred deferrable
4 );
Table created.
SQL> create table product
2 (id number primary key,
3 id_fact number references factory initially deferred deferrable,
4 id_work number references worker initially deferred deferrable
5 );
Table created.
SQL> insert into product values (1000, 1, 100);
1 row created.
SQL> insert into factory values (1);
1 row created.
SQL> insert into worker values (100, 1);
1 row created.
SQL>
推荐阅读
- c++ - VC++ 2015 错误:“涉及具有内部链接的对象的表达式不能用作非类型参数”
- php - 如何遍历xml表行并通过属性名称访问列值
- image - 从 Firestore 中检索图像数组
- java - Spring - 定期重新加载属性
- r - 如何“反向融化”data.frame?
- string - AppleScript,无法替换文本中的字符
- vb.net - 从文本文件中获取变量,然后设置一个新变量
- spring-boot - Spring Boot、Spring Security - 基于 XML 的配置
- amazon-web-services - 使用 terrform 创建 AWS SSM 任务时输入参数被禁用
- javascript - 在我的苗条网络应用程序中使用动态导入和加密 js 时,我无法正确编译汇总