`

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

阅读更多

1 级联删除

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);

 初始班级数据

\"></p>
<p>初始学生数据</p>
<p><img style=数据库中保存具有层级关系的数据时,表的外键引用同一个表的主键。这时候无法用触发器实现级联更新。

分享到:
评论

相关推荐

    Oracle数据库中的级联查询、级联删除、级联更新操作教程

    在ORACLE 数据库中有一种方法可以实现级联查询 select * //要查询的字段 from table //具有子接点ID与父接点ID的表 start with selfid=id //给定一个startid(字段名为子接点ID,及开始的ID号) connect by prior ...

    解析Oracle中多表级联删除的方法

    创建数据库时为了防止其他人不小心删除操作错误, 所有的外键都没有加级联删除。哪知,不知什么时候自己入了一批错误的数据进去,入库使用的是软件自动的,一下点错给自己带来无尽麻烦啊,删除就不好办了

    21天学通Oracle

    6.2.3 级联更新与级联删除 100 6.2.4 修改外键属性 102 6.2.5 外键使用 104 6.3 唯一性约束 105 6.3.1 唯一性约束简介 105 6.3.2 创建唯一性约束 105 6.3.3 修改唯一性约束 107 6.3.4 唯一性约束的使用 108 ...

    Oracle 9i&10g编程艺术:深入数据库体系结构(全本)含脚本

    8.3.2 DEFERRABLE约束和级联更新 261 8.4 不好的事务习惯 263 8.4.1 在循环中提交? 264 8.4.2 使用自动提交? 270 8.5 分布式事务 271 8.6 自治事务 273 8.6.1 自治事务如何工作? 273 8.6.2 何时使用自治事务?...

    Oracle最常用的语句

    Oracle 最常用的命令 1.登陆系统用户 :sqlplus 然后输入系统用户名和密码  登陆别的用户 : conn 用户名/密码; 2.创建表空间  create tablespace 空间名  datafile 'c:\空间名' size 15M --表空间的存放路径,...

    javaweb博客网站

    3.数据库没设计好,外键直接引用的主键属性,所以没做级联更新 4.其实这个项目是个团队作业,组员水平不一,所以写的简单,适合初学者学习,高手勿喷 5.sql文件我用的Navicat导出的,导入好像有点问题,自己改一改吧...

    jdbc基础和参考

    delete:在删除当前对象的时候,级联删除和他相关联的对象 all: save-update+delete delete-orphan:解除关联关系时,删除和当前对象失去关联的对象 all-delete-orphan:all+delete-orphan 单向的一对多的关系,在进行...

    Hibernate注解

    很奇怪),分别是CascadeType.PERSIST(级联新建),CascadeType.REMOVE(级联删除),CascadeType.REFRESH(级联刷新),CascadeType.MERGE(级联更新),CascadeType.ALL(全部四项) * 方法一 * 主表: ?@OneToOne...

    Oracle编程艺术

    源代码和有关更新.......................................................................... 29 勘误表....................................................................................... 29 配置环境....

    mysql数据库的基本操作语法

    级联删除:删除主表的数据时,关联的从表数据也删除,则需要在建立外键约束的后面增加on deletecascade 或on delete set null,前者是级联删除,后者是将从表的关联列的值设置为null。 create table student( id int...

    sql总结.doc

    它还提供对基于游标位置而对表中数据进行删除或更新的能力 缺点: 处理大数据量时,效率低下,占用内存大 (6)什么时候选择使用游标? 一般是在循环处理的时候使用。 比如你判断一个班上的同学数学成绩怎么样,你...

    Java面试宝典2020修订版V1.0.1.doc

    12、主键和外键的区别? 44 13、在数据库中查询语句速度很慢,如何优化? 44 14、数据库三范式是什么? 44 15、union和union all有什么不同? 45 16、char、varchar2、varchar有什么区别? 45 17、Oracle和Mysql的区别...

Global site tag (gtag.js) - Google Analytics