gpt4 book ai didi

oracle - 是否可以在 ORACLE 11g 中的父记录之前插入子记录?

转载 作者:行者123 更新时间:2023-12-02 01:02:29 24 4
gpt4 key购买 nike

我需要编写一个 DML 脚本来展示它是如何工作的如果 child 的 FK 约束检查是延迟到节省时间并需要手动执行允许此检查延迟的更改。

下面是两个表:

CREATE TABLE customers (
cust_code VARCHAR2(3),
name VARCHAR2(50),
region VARCHAR2(5))
TABLESPACE mine;

CREATE TABLE orders (
ord_id NUMBER(3),
ord_date DATE,
cust_code VARCHAR2(3),
date_of_dely DATE )
TABLESPACE mine
PCTFREE 20
PCTUSED 50
MAXTRANS 100;
Customer 中的

Primary Keycust_codeOrders 中的Foreign Keycust_code

最佳答案

首先,您需要创建两个约束(主键+foreing key)才能使用子/父关系检查:

CREATE TABLE customers (
cust_code VARCHAR2(3),
name VARCHAR2(50),
region VARCHAR2(5),
constraint cust_pk PRIMARY KEY ( cust_code)
);


CREATE TABLE orders (
ord_id NUMBER(3),
ord_date DATE,
cust_code VARCHAR2(3),
date_of_dely DATE,
constraint cust_fk foreign key (cust_code) references customers(cust_code) deferrable
)
;

注意约束定义末尾的关键字 deferrable。这使得约束可延迟,即约束检查可以延迟,没有这个子句是不可能的。


现在,如果您尝试插入一个引用不存在的客户的订单,您将收到错误消息,因为必须事先插入该订单:

insert into orders values( 1, sysdate, 1, sysdate);

ORA-02291: integrity constraint (TEST.CUST_FK) violated - parent key not found

但是你可以使用SET CONSTRAINT命令更改此行为并将对单个事务的约束检查推迟到提交时,因此您可以在没有客户的情况下插入订单,约束检查将推迟到提交时:

set constraint cust_fk deferred;
Constraint CUST_FK succeeded.

insert into orders values( 1, sysdate, 1, sysdate);
1 row inserted.

commit;
ORA-02091: transaction rolled back
ORA-02291: integrity constraint (TEST.CUST_FK) violated - parent key not found

关于oracle - 是否可以在 ORACLE 11g 中的父记录之前插入子记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49684908/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com