外键未加索引和加索引的区别(二)

 
该文章与上一篇文章外键未加索引和加索引的区别 ( ) 区别就是子表的创建不一样 :
-- 在外键上没有建索引的子表
CREATE TABLE emp
   (emp_id number(10),
    name varchar2(20) ,
    dept_id number(2) CONSTRAINT fk_emp
                      references dept(dept_id)               
   );
ON DELETE CASCADE 被删除 , 其他条件一样 .
实验情况和原来的一样 , 下面列出了不同的实验:
外键未加索引情况,实验如下:
实验 7
Session7: 对父表 DEPT 进行删除操作,并且所更新的行在父表中实际不存:
delete from dept where 1=0
Session0 :此时加锁的信息都是如下:
SQL> @c:/showlock;
O_NAME            SID LOCK_TYPE            OBJECT_NAME         XIDUSN    XIDSLOT     XIDSQN
---------- ---------- -------------------- --------------- ---------- ---------- ----------
DAIMIN            139 Row Exclusive        DEPT                    12          8        673
 
SQL> @c:/showalllock;
       SID TYPE        ID1        ID2 LOCK_TYPE               REQUEST      CTIME      BLOCK
---------- ---- ---------- ---------- -------------------- ---------- ---------- ----------
       139 TX       786440        673 Exclusive                     0          3          0
       139 TM        55606          0 Row Exclusive                 0          3          0
分析:子表创建没有了 ON DELETE CASCADE 语句,此时对父表的删除如果父表的主键在子表中没有被使用,那么此删除不会对子 表加任何锁,与子表无关。
 
Session7: 对父表 DEPT 进行删除操作,并且所更新的行在父表中实际不存在或者实际存在:
delete from dept where dept_id=12
报错 : ORA-02292: 违反完整约束条件 (DAIMIN.FK_EMP),- 已找到子记录
分析:子表创建没有了 ON DELETE CASCADE 语句,此时对父表的删除如果父表的主键在子表中被使用,那么 oracle 就不允许你对父表的该条记录进行删除。
 
外键加索引情况,实验如下:
给表 EMP 的外键添加索引如下:
-- Create/Recreate indexes on the Foreign Key
create index EMP_DEPT_ID on EMP (DEPT_ID);
 
实验 8
Session7: 对父表 DEPT 进行删除操作,并且所更新的行在父表中实际存在:
 delete from dept where dept_id=12
报错 : ORA-02292: 违反完整约束条件 (DAIMIN.FK_EMP),- 已找到子记录
分析:子表创建没有了 ON DELETE CASCADE 语句,此时对父表的删除如果父表的主键在子表中被使用,那么 oracle 就不允许你对父表的该条记录进行删除。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值