鉴于此前收藏的精彩博客无料被删除了,很是痛心,所以还是要复制一下

一、级联删除

Oracle在外键的删除上有NO ACTION(类似RESTRICT)、CASCADE和SET NULL三种行为。

下面以学生-班级为例说明不同情况下的外键删除,学生属于班级,班级的主键是学生的外键。

-- 班级表

CRATE TABLE TB_CLASS

(

ID NUMBER NOT NULL, --班级主键

NAME VARCHAR2(50), --班级名称

CONSTRAINT PK_TB_CLASS PRIMARY KEY (ID)

);

-- 学生表

CREATE TABLE TB_STUDENT

(

ID NUMBER NOT NULL, --学生主键

NAME VARCHAR2(50), --学生姓名

CLASS_ID NUMBER, --学生所属班级,外键

--主键约束

CONSTRAINT PK_TB_STUDENT PRIMARY KEY (ID),

--外键约束

--设置级联删除为NO ACTION

CONSTRAINT FK_TB_STUDENT_CLASS_ID FOREIGN KEY (CLASS_ID) REFERENCES TB_CLASS (ID)

);

-- 添加班级数据

INSERT INTO TB_CLASS (ID, NAME) VALUES (1, '一班');

INSERT INTO TB_CLASS (ID, NAME) VALUES (2, '二班');

INSERT INTO TB_CLASS (ID, NAME) VALUES (3, '三班');

-- 添加学生数据

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (1, '小明', 1);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (2, '小刚', 1);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (3, '小王', 1);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (4, '二明', 2);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (5, '二刚', 2);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (6, '二王', 2);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (7, '大明', 3);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (8, '大刚', 3);

INSERT INTO TB_STUDENT (ID, NAME, CLASS_ID) VALUES (9, '大王', 3);

1、NO ACTION

NO ACTION指当删除主表中被引用列的数据时,如果子表的引用列中包含该值,则禁止该操作执行。

现在学生外键级联删除是NO ACTION,执行删除班级操作。

2、SET NULL

SET NULL指当删除主表中被引用列的数据时,将子表中相应引用列的值设置为NULL值。SET NULL有个前提就是外键引用列必须可以设置为NULL。

把学生表(TB_STUDENT)的外键删除行为改为SET NULL。ORACLE似乎没有MODIFY CONSTRAINT操作,只能先删除外键,然后创建新的。

3、CASCADE

CASCADE指当删除主表中被引用列的数据时,级联删除子表中相应的数据行。

把学生表(TB_STUDENT)的外键删除行为改为CASCADE。

二、级联更新

Oracle本身并不支持外键的级联更新,不过可以按照如下方法达到级联更新的效果。

首先要先了解Oracle延迟约束和非延迟约束。非延迟约束就是在修改记录的时候会立刻进行约束条件的查看,是否因为违反了某些约束条件而不能执行修改。延迟约束不会在刚进行修改的时候进行约束查看,只有提交的时候才会检查。Oracle的级联更新就是使用这个特性来实现的。

Oracle的外键默认是非延迟约束,修改学生的外键为延迟约束。

--删除学生表(TB_STUDENT)上的已有外键

ALTER TABLE TB_STUDENT DROP CONSTRAINT FK_TB_STUDENT_CLASS_ID;

--添加延迟约束外键

ALTER TABLE TB_STUDENT ADD CONSTRAINT FK_TB_STUDENT_CLASS_ID FOREIGN KEY (CLASS_ID) REFERENCES TB_CLASS (ID) ON DELETE CASCADE DEFERRABLE;

设置触发器,当班级表(TB_CLASS)的主键改变了,就更新学生表(TB_STUDENT)的外键(CLASS_ID)。

CREATE OR REPLACE TRIGGER TGR_TB_CLASS_UPDATE

AFTER UPDATE OF ID ON TB_CLASS

FOR EACH ROW

BEGIN

IF :OLD.ID<>:NEW.ID THEN

UPDATE TB_STUDENT SET CLASS_ID=:NEW.ID WHERE CLASS_ID=:OLD.ID;

END IF;

END;

&lbrack;NHibernate&rsqb;一对多关系(级联删除,级联添加)

目录 写在前面 文档与系列文章 一对多关系 一个例子 级联删除 级联保存 总结 写在前面 在前面的文章中,我们只使用了一个Customer类进行举例,而在客户.订单.产品中它们的关系,咱们并没有涉及, ...

【Python】Django数据模型、级联删除、级联更新、ER图导出等

在本文中,我们将向读者详细介绍如何在更新和删除父表数据的同时,触发有关子表数据的级联更新和删除操作.您将看到当使用InnoDB表的时候,借助于外键约束就可以轻松搞定这一过程. 一.利用外键约束更新并删 ...

sqlserver 级联删除、级联更新

增加外键约束时,设置级联更新.级联删除:[ ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT } ][ ON UPDATE { NO A ...

MySQL之级联删除、级联更新、级联置空

1. 准备测试表 # 专业表major ))engine=innodb default charset=utf8; # 学生表mstudent ), major int)engine=innodb d ...

Oracle外键级联删除和级联更新

https://www.2cto.com/database/201507/417496.html

MySQL级联删除和级联修改

1.新建主键table create table demo1_zhujian ( id int primary key auto_increment, name )); 2.新建外键table cre ...

oracle级联更新与级联删除

Oracle级联删除:可以使用外键约束来实现,建立表的主外键关系,给列设置级联删除.如下: ——创建了CLASS表,并设置ID字段为主键. -- Create tablecreate table CL ...

Oracle如何操作级联删除

级联删除即删除包含主键值的行的操作,该值由其它表的现有行中的外键列引用.在级联删除中,还删除其外键值引用删除的主键值的所有行. 语法: Foreign Key (column[,...n]) refe ...

随机推荐

为&period;NET搭建Linux的开发环境&comma;鄙视那些将简单事情复杂化的人

写在前面的吐槽 原本跨平台开发很容易的事情, 很多人把它弄得很麻烦,给外人的感觉:你们.NET跨平台开发好不成熟,好麻烦哦. ..................................... ...

Centos6&period;x服务器配置jdk&plus;tomcat&plus;mysql环境

1,jdk配置 由于jdk官网的链接不直接支持wget,可以使用下面的方法下载jdk,其中jdk版本为jdk1.8.0_91: wget --no-check-certificate --no-coo ...

xenomai安装

一.Linux内核打实时补丁 1.将下载的Linux和xenomai安装包放在/usr/src目录下,并解压文件包,命令如下 tar xjf  Linux-3.8.13.tar.bz2   tar x ...

UNIX&comma;基础知识,文件IO,文件和目录

2015.1.27星期二,早晨阴天,中午下雪了今天上午老师不上课,程序语句,记一下:main(void){ int c; while((c = getc(stdin)) != EOF) if(putc ...

Java抓取网页数据

http://ayang1588.github.io/blog/2013/04/08/catchdata/ 最近处于离职状态,正赶清闲,开始着手自己的毕业设计,课题定的是JavaWeb购物平台,打算用 ...

ZOJ 1301 The New Villa &lpar;BFS &plus; 状态压缩&rpar;

题意:黑先生新买了一栋别墅,可是里面的电灯线路的连接是很混乱的(每个房间的开关可能控制其他房间,房间数<=10),有一天晚上他回家时发现所有的灯(除了他出发的房间)都是关闭的,而他想回卧室去休息 ...

db2 load乱码问题

在使用db2过程中经常需要从一个库里拿数据到自己库里来,通常需要将源表的数据导为数据文件,通过数据文件load到自己库里. 这个过程如果两个库的字符编码不一致,常规导入导出就会出现中文乱码. 以下是两 ...

使用jquery日期选择器flatpickr&period;js&comma;使用js动态创建input元素时插件失效

最近写页面时需要用到,日期选择器,网上搜索了一些插件,最后使用了flatpickr.js.我是从npm 上拉下的依赖  npm install flatpickr --save 随后在页面中引入css ...

Linux 查看dns运行状态

命令:dig  www.baidu.com #测试解析 安装:yum install bind-utils @:指定进行域名解析的域名服务器: -b: ...

AIX的iostat命令解析&lpar;翻译红皮书&rpar;

1.确定磁盘使用率 $ iostat -T 2 10System configuration: lcpu=8 drives=29 paths=52 vdisks=0tty:      tin      ...

oracle 允许级联删除,oracle系列--级联删除和级联更新相关推荐

  1. oracle级联删除表空间,Oracle表的创建.表空间创建删除,导入导出等

    创建表空间; 先在E盘建立oradate再在里面建一个temp, 再打开命令行cmd在写入sqlplus再写入sys/oracle@orcl as sysdba再写入 create tablespac ...

  2. oracle中删除级联方法,Oracle 外键级联删除

    Oracle 外键级联删除 日期:2010年5月22日 作者: 近来软件系统中要删除一条记载,就要关联到同时删除好多张表,它们之间还存在着约束联络.所以思索到在树立表时加上约束联络,细致内容如下: S ...

  3. oracle修改表字段约束条件,Oracle创建表、修改表、删除表、约束条件语法

    三.删除表 truncate table 表名 //删除表中的所有数据,速度比delete快很多,截断表 delete from table 条件   // 删除表中的数据 drop table 表名 ...

  4. mysql数据库级联删除_怎样对数据库进行级联删除?

    众所周知,数据库软件有级联删除和更新的功能.所谓级联删除和更新是说,如果两个表之间使用了主键与外键的关系约束,当对主键表的记录进行更新或者删除操作时,如果是更新,则自动将外键表的记录自动更新,如果是删 ...

  5. 删除oracle数据库的三种方法,oracle数据库的删除方法详解

    oracle数据库的删除方法详解 1.图形界面删除 练习之前记得创建快照 执行命令之前要保证数据库属于open状态 SQL> alter database open; [oracle@local ...

  6. 删除oracle中的一列数据,Oracle删除表数据

    本篇文章帮大家学习Oracle删除表数据,包含了Oracle删除表数据使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以用来参考. 在本教程中将学习如何使用Oracle DELETE语 ...

  7. Oracle数据库:创建、修改、删除、使用同义词synonym和索引index

    Oracle数据库:创建.修改.删除.使用同义词synonym和索引index 2022找工作是学历.能力和运气的超强结合体,遇到寒冬,大厂不招人,可能很多算法学生都得去找开发,测开 测开的话,你就得 ...

  8. cmd删除oracle监听,oracle数据库监听删除

    oracle 10G for linux常用命令 oracle 10G for linux常用命令 首先以Oracle用户登录 1. $/oracle/oracle/app/product/101/b ...

  9. 如何删除oracle实例

    如何删除oracle实例 rm-rf /opt/app/oracle/10.2.0/cfgtoollogs/dbca/实例名称 rm -rf /opt/app/oracle/admin/实例名称 rm ...

最新文章

  1. 转:strcat与strcpy与strcmp与strlen
  2. ACMNO.40 C语言-子串 有一字符串,包含n个字符。写一函数,将此字符串中从第m个字符开始的全部字符复制成为另一个字符串
  3. Promethus+Grafana监控解决方案
  4. jvm性能调优实战 - 39一次大促导致的内存泄漏和Full GC优化
  5. python论坛签到_论坛自动签到教程
  6. 走进Java中的持有对象(容器类)之一 容器分类
  7. html怎么快速打出来的,javascript – 快速打印HTML5画布
  8. python反汇编指令_IDApython 命令
  9. 调整心态,正确应对所学技术的失宠?(至F#,SL的学习者们)
  10. npm安装typescript
  11. [转载] python学习笔记(三)- numpy基础:array及matrix详解
  12. JDK17 带来什么新特性?网友:不好意思,我还在JDK6踏步走...
  13. WCF 4.0路由服务Routing Service
  14. PADS2007_教程之PADS LAYOUT
  15. 用python处理蛋白质互作信息
  16. 茶叶分类--六大茶类
  17. uniapp 判断是否登录,是跳转至首页,否跳转至登录页
  18. 解决win7语言栏消失问题
  19. rk3288 android6,RK3288 的 Android 7.1.2 来了!
  20. git-cz 规范提交代码注释

热门文章

  1. 与蜂窝连接的无人机的空地干扰缓解
  2. Spring aop报错:com.sun.proxy.$Proxyxxx cannot be cast to yyy
  3. 数据库(mysql)之事务和存储引擎
  4. 呆萝卜与每日优鲜竞品分析
  5. 英语单词记忆 词源法-思维导图(18)词源st/sist/stat/stin/stem-277
  6. 有关公司治理的一些收获
  7. 我想把生活折腾成自己想要的样子
  8. Sql语句为什么大写
  9. Unity 激活许可证的时候出现 serial has reached the maximum number of activations提示
  10. [免费]CAD批量清理与版本转换工具——无需打开图纸清理及转换版本