• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    Oracle数据库中外键的相关操作整理

    racle使用外键来限制子表中参考的字段值,要求子表中的数据必须在主表中存在。当主表的记录发生变化时导致外键参考唯一约束值发生了变化时,Oracle指定了三种动作:默认值(类似于restrict)、delete cascade和delete set null。(
    1.创建父表并初始化数据

    SQL> create table t_parent (parent_id int primary key, name varchar2(10));
    Table created.
    SQL> insert into t_parent values (1,'record1');
    1 row created.
    SQL> insert into t_parent values (2,'record2');
    1 row created.
    SQL> insert into t_parent values (3,'record3');
    1 row created.
    SQL> commit;
    Commit complete.
    

    2.创建三种类型的子表t_child1、t_child2和t_child3
    (1)no action类别

    SQL> create table t_child1 (child1_id int primary key, parent_id int);
    Table created.
    SQL> alter table t_child1 add constraint FK_t_child1 foreign key (parent_id) references t_parent (parent_id);
    Table altered.
    SQL> insert into t_child1 values (1,1);
    1 row created.
    SQL> commit;
    Commit complete.
    

    (2)cascade类型

    SQL> create table t_child2 (child2_id int primary key, parent_id int);
    Table created.
    SQL> alter table t_child2 add constraint FK_t_child2 foreign key (parent_id) references t_parent (parent_id) on delete cascade;
    Table altered.
    SQL> insert into t_child2 values (2,2);
    1 row created.
    SQL> commit;
    Commit complete.
    

    (3)SET NULL类型

    SQL> create table t_child3 (child2_id int primary key, parent_id int);
    Table created.
    SQL> alter table t_child3 add constraint FK_t_child3 foreign key (parent_id) references t_parent (parent_id) on delete set null;
    Table altered.
    SQL> insert into t_child3 values (3,3);
    1 row created.
    SQL> commit;
    Commit complete.
    

    3.确认主表和子表中的数据

    SQL> select * from T_PARENT;
    PARENT_ID NAME
    ---------- ----------
         1 record1
         2 record2
         3 record3
    SQL> select * from T_CHILD1;
    CHILD1_ID PARENT_ID
    ---------- ----------
         1     1
    SQL> select * from T_CHILD2;
     CHILD2_ID PARENT_ID
    ---------- ----------
         2     2
    SQL> select * from T_CHILD3;
     CHILD2_ID PARENT_ID
    ---------- ----------
         3     3
    



    4.尝试对具有默认类型外键参照的主表记录进行删除

    SQL> delete from T_PARENT where parent_id = 1;
    delete from T_PARENT where parent_id = 1
    *
    ERROR at line 1:
    ORA-02292: integrity constraint (HBHE.FK_T_CHILD1) violated - child record
    found
    SQL> select * from T_CHILD1;
    
    
     CHILD1_ID PARENT_ID
    ---------- ----------
         1     1
    
    

    在此类型下,不允许删除操作

    5.尝试对具有delete cascade类型外键参照的主表记录进行删除

    SQL> delete from T_PARENT where parent_id = 2;
    1 row deleted.
    SQL> select * from T_CHILD2;
    no rows selected
    

    级联删除成功


    6.尝试对具有delete set null类型外键参照的主表记录进行删除

    SQL> delete from T_PARENT where parent_id = 3;
    
    
    1 row deleted.
    
    SQL> select * from T_CHILD3;
    
    
     CHILD2_ID PARENT_ID
    ---------- ----------
         3
    
    

      主表记录可以完成删除,子表中对应的内容被设置为NULL。

    您可能感兴趣的文章:
    • Oracle触发器用法实例详解
    • Oracle自动备份脚本
    • Oracle自动备份及自动备份步骤
    • Oracle创建Database Link的两种方式详解
    • oracle中变长数组varray,嵌套表,集合使用方法
    • oracle RETURNING 子句使用方法
    • Oracle数据库中建立索引的基本方法讲解
    • Oracle例外用法实例详解
    上一篇:在Oracle数据库中添加外键约束的方法详解
    下一篇:简单说明Oracle数据库中对死锁的查询及解决方法
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    Oracle数据库中外键的相关操作整理 Oracle,数据库,中外,键,的,