Oracle外键约束的三种删除行为小结 |
Oracle外键约束的三种删除行为分别是:默认删除(No Action)、级联删除(Cascade)和置空删除(Set Null) 。这三种行为定义了当主表(父表)中的记录被删除时,子表中对应外键的处理方式 。 1、创建主表及子表并初始化数据1.1、创建主表t_parent,并插入三条记录hr@orcl> create table t_parent (parent_id int primary key, name varchar2(10)); hr@orcl> insert into t_parent values (1,'record1'); hr@orcl> insert into t_parent values (2,'record2'); hr@orcl> insert into t_parent values (3,'record3'); hr@orcl> commit; hr@orcl> select * from T_PARENT; PARENT_ID NAME ---------- ------------------------------ 1 record1 2 record2 3 record3 1.2、创建字表外键约束默认删除no action类型hr@orcl> create table t_child1 (child1_id int primary key, parent_id int); hr@orcl> alter table t_child1 add constraint FK_t_child1 foreign key (parent_id) references t_parent (parent_id); hr@orcl> insert into t_child1 values (1,1); hr@orcl> commit; hr@orcl> select * from T_CHILD1; CHILD1_ID PARENT_ID ---------- ---------- 1 1 1.3、创建字表外键约束级联删除(Cascade)hr@orcl> create table t_child2 (child2_id int primary key, parent_id int); hr@orcl> alter table t_child2 add constraint FK_t_child2 foreign key (parent_id) references t_parent (parent_id) on delete cascade; hr@orcl> insert into t_child2 values (2,2); hr@orcl> commit; hr@orcl> select * from T_CHILD2; CHILD2_ID PARENT_ID ---------- ---------- 2 2 1.4、创建字表外键约束置空删除(Set Null)hr@orcl> create table t_child3 (child2_id int primary key, parent_id int); hr@orcl> alter table t_child3 add constraint FK_t_child3 foreign key (parent_id) references t_parent (parent_id) on delete set null; hr@orcl> insert into t_child3 values (3,3); hr@orcl> commit; hr@orcl> select * from T_CHILD3; CHILD2_ID PARENT_ID ---------- ---------- 3 3 2、三种删除行为2.1、默认删除(No Action)行为描述:
示例: 如果尝试删除主表 hr@orcl> delete from T_PARENT where parent_id = 1; delete from T_PARENT where parent_id = 1 * ERROR at line 1: ORA-02292: integrity constraint (SEC.FK_T_CHILD1) violated - child record found hr@orcl> select * from T_CHILD1; CHILD1_ID PARENT_ID ---------- ---------- 1 1 在此类型下,不允许删除 。 2.2、级联删除(Cascade)行为描述:
示例: 如果主表 hr@orcl> delete from T_PARENT where parent_id = 2; 1 row deleted. hr@orcl> select * from T_CHILD2; no rows selected 成功,级联删除成功 。 2.3、 置空删除(Set Null)行为描述:
示例: 如果主表 hr@orcl> delete from T_PARENT where parent_id = 3; 1 row deleted. hr@orcl> select * from T_CHILD3; CHILD2_ID PARENT_ID ---------- ---------- 3 主表记录可以完成删除,子表中对应的内容被设置为NULL 。 3、 总结以上就是在Oracle数据库,当主表信息删除后对应的子表中记录的三种不同的处理方式,针对具体的应用场合请选择合适类型 。 Oracle外键约束的三种删除行为为数据库设计提供了灵活性,可以根据实际需求选择合适的行为来维护数据的完整性和一致性 。在实际应用中,应根据数据的依赖关系和业务逻辑来选择合适的删除行为 。 以上信息基于Oracle数据库的外键约束行为,并参考了相关的技术文档和博客文章 。需要注意的是,随着Oracle数据库版本的更新,某些细节和语法可能会有所变化,因此建议查阅最新的官方文档以获取最准确的信息 。 到此这篇关于Oracle外键约束的三种删除行为小结的文章就介绍到这了,更多相关Oracle外键约束删除内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持! |