• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

Oracle级联操作

mysql 搞代码 4年前 (2022-01-09) 42次浏览 已收录 0个评论

Oracle的级联操作是为了处理,在删除主表数据时,从表外键数据该怎么处理,有如下三种情况:SET NULL,CASCADE,NO ACTION。

Oracle的级联操作是为了处理,在删除主表数据时,从表外键数据该怎么处理,有如下三种情况:

1、SET NULL:

此关键字用于表示当删除主表中被引用列的数据时,将子表中相应引用列的值设置为NULL值。这种情况要求子表中的引用列支持NULL值。

2、CASCADE:

此关键字用于表示当删除主表中被引用列的数据时,级联删除子表中相应的数据行。

3、NO ACTION:

约束后面省略ON DELETE的情况,,此关键字用于表示当删除主表中被引用列的数据时,如果子表的引用列中包含该值,则禁止该操作执行。

下面通过例子展示:

第一种情况:

–创建主表

SQL> create table father(

2 f_id number(10) primary key,

3 f_name varchar2(20)

4 );

表已创建。

–创建从表

SQL> create table child(
2 c_id number(10) primary key,
3 f_id number(10),
4 c_name varchar2(20),
5 constraint ch_fa foreign key (f_id) references father(f_id)
6 on delete set null
7 );

–插入数据

SQL> insert into father values (1,’cupid’);

已创建 1 行。

SQL> insert into father values (2,’dorria’);

已创建 1 行。

SQL> insert into child values (1,1,’jack’);

已创建 1 行。

SQL> insert into child values (2,2,’rose’);

已创建 1 行。

commit;

提交完成。

SQL> delete from father where f_id=1;

已删除 1 行。

SQL> commit;

提交完成。

SQL> select * from father;

F_ID F_NAME
———- ——————————-
2 dorria
SQL> select * from child;

C_ID F_ID C_NAME
———- ———- ——————–
1 jack
2 2 rose

第二种情况:

–创建主表

SQL> create table father_1(

2 f_id number(10) primary key,

3 f_name varchar2(20)

4 );

表已创建。

–创建从表

SQL> create table child_1(
2 c_id number(10) primary key,
3 f_id number(10),
4 c_name varchar2(20),
5 constraint ch_fa_1 foreign key (f_id) references father(f_id)
6 on delete cascade
7 );

–插入数据

SQL> insert into father_1 values (1,’cupid’);

已创建 1 行。

SQL> insert into father_1 values (2,’dorria’);

已创建 1 行。

SQL> insert into child_1 values (1,1,’jack’);

已创建 1 行。

SQL> insert into child_1 values (2,2,’rose’);

已创建 1 行。

commit;

提交完成。

SQL> delete from father where f_id=1;

已删除 1 行。

SQL> commit;

提交完成。

SQL> se

本文来源gao!%daima.com搞$代*!码$网3

lect * from father;

F_ID F_NAME
———- ——————————-
2 dorria
SQL> select * from child_1;

C_ID F_ID C_NAME
———- ———- ——————–
2 2 rose

第三种情况:

–创建主表

SQL> create table father_2(

2 f_id number(10) primary key,

3 f_name varchar2(20)

4 );

表已创建。

–创建从表

SQL> create table child_2(
2 c_id number(10) primary key,
3 f_id number(10),
4 c_name varchar2(20),
5 constraint ch_fa_2 foreign key (f_id) references father(f_id)
6 );

–插入数据

SQL> insert into father_2 values (1,’cupid’);

已创建 1 行。

SQL> insert into father_2 values (2,’dorria’);

已创建 1 行。

SQL> insert into child_2 values (1,1,’jack’);

已创建 1 行。

SQL> insert into child_2 values (2,2,’rose’);

已创建 1 行。

commit;

提交完成。

SQL> delete from father_2 where f_id=1;
delete from father_2 where f_id=1
*
第 1 行出现错误:
ORA-02292: 违反完整约束条件 (SCOTT.CH_FA_2) – 已找到子记录


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:Oracle级联操作

喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址