【Oracle学习】之 外键约束(3种删除-详细)与 约束激活(失效)
来源:互联网 发布:2017年最新网络用语 编辑:程序博客网 时间:2024/06/04 18:48
Q:删除主表记录(子表外键存在下),3种删除方式?
A:①默认删除(default) ②级联删除 ③置空删除。具体操作见下文
主表和子表的概念:
如果表中定义了外键约束,那么该表通常被称为子表,例如下文的test_student表
如果表中包含引用键,那么该表被称为父表,例如test_class表
一、外键删除
①默认删除—-即什么都不加 或 使用 no action关键字
简介:如果在定义外键约束时使用no action关键字,那么当父表中被引用列的数据被删除时,将违反外键约束,改操作也将被禁止执行,这也是外键约束的默认引用类型。
//查看test_student 有哪些约束select constraint_type, table_name from user_constraints where table_name = 'TEST_STUDENT';//添加约束alter table test_student add constraint FK_TAB_STUDNET_TAB_CLASS foreign key (s_fk_id) references test_class (c_id);select * from test_class;select * from test_student; delete from test_class where c_id = 1;
②级联删除—-使用关键字 cascade
简介:如果在定义外键约束时使用cascade关键字,那么当父表中被引用列的数据被删除时,子表中对应的数据也将被删除。
//删除alter table test_student drop constraint FK_TAB_STUDNET_TAB_CLASS;//添加alter table test_student add constraint FK_TAB_STUDNET_TAB_CLASS foreign key (s_fk_id) references test_class (c_id) on delete cascade;select * from test_class;select * from test_student; delete from test_class where c_id = 1;
③置空删除—-使用关键字set null
简介:如果在定义外键约束时使用set null关键字,那么当主表中被引用列的数据被删除时,子表中对应的数据被设置为null。要使这个关键字起作用,子表中的对应列必须支持NULL值。
//删除alter table test_student drop constraint FK_TAB_STUDNET_TAB_CLASS;//添加alter table test_student add constraint FK_TAB_STUDNET_TAB_CLASS foreign key (s_fk_id) references test_class (c_id) on delete set null;select * from test_class;select * from test_student; delete from test_class where c_id = 1;
二、禁止和激活约束
①禁止状态(DISABLE):当约束处于禁止状态时,即使对表的操作与约束规则相冲突,操作也会被执行。
//使失效alter table test_student disable constraint FK_TAB_STUDNET_TAB_CLASS;//查看状态select constraint_type, table_name, status from user_constraints where table_name = 'TEST_STUDENT';select * from test_class;select * from test_student; delete from test_class where c_id = 1;insert into test_student (s_id, s_name, s_fk_id) values (3, 'TITI', 3);
②激活状态(ENABLE):当约束处于激活状态时,如果对表的操作与约束规则相冲突,则操作会被取消。
//使有效alter table test_student enable constraint FK_TAB_STUDNET_TAB_CLASS;//查看状态select constraint_type, table_name, status from user_constraints where table_name = 'TEST_STUDENT';select * from test_class;select * from test_student; delete from test_class where c_id = 1;insert into test_student (s_id, s_name, s_fk_id) values (3, 'TITI', 3);
1 0
- 【Oracle学习】之 外键约束(3种删除-详细)与 约束激活(失效)
- Oracle中如何创建约束,查询约束和删除约束(check约束,外键和主键约束)
- Oracle外键约束之删除外键约束
- oracle 删除外键约束 禁用约束 启用约束
- Oracle中删除外键约束、禁用约束、启用约束
- Oracle中删除外键约束、禁用约束、启用约束
- Oracle中删除外键约束、禁用约束、启用约束
- oracle 删除外键约束 禁用约束 启用约束
- 外键约束失效--级联更新删除
- Oracle-主键约束、唯一约束与外键约束
- Oracle-主键约束、唯一约束与外键约束
- Oracle-主键约束、唯一约束与外键约束
- 激活外键约束
- 【Oracle学习】之 约束
- 44、Oracle数据库设计(定义约束 外键约束)
- oracle学习之索引与约束
- oracle学习之约束与索引
- SQL与ORACLE的外键约束-级联删除
- tiny6410LED驱动设计
- 算法第十周作业01
- Python+Selenium框架设计篇之5-框架内封装基类和实现POM
- [Modern Compiler] Lexical Analysis
- Android里常用的nohttp的简单封装
- 【Oracle学习】之 外键约束(3种删除-详细)与 约束激活(失效)
- Android中startService和bindService的区别
- leetcode题解-33. Search in Rotated Sorted Array && 81. Search in Rotated Sorted Array II
- android里activity的生命周期和启动模式
- C++和JAVA的容器对照
- 下拉选择框之Spinner
- Hibernate学习-11:持久化对象状态及状态转换、持久态对象自动更新数据库
- 多线程迁移redis数据笔记
- 07_集合_List集合详解