外键引起的锁

环境:

emp上面有外键FK_deptno,它参考了dept表上的dpetno列,在oracle  10g  R2

 

以下会话按顺序执行

----------------------------------------------------------------

会话1

Select  Userenv('SID'From  dual  --144

 

首先给emp6级锁

Lock  Table  scott.emp  In  Exclusive  Mode

 

---------------------------------------------------------------

会话2

Select  Userenv('SID'From  dual  --151

 

下面删除emp操作时阻塞了

Delete  From  scott.emp             

---------------------------------------------------------------

会话3

Select  Userenv('SID'From  dual  --112

 

下面更新dept表的deptno字段时候出现阻塞了

Update    scott.dept  Set  deptno=39  Where  deptno=30

 

---------------------------------------------------------------

会话4

Select  Userenv('SID'From  dual  --116

 

下面更新dept表的dname字段(非外键涉及的字段),能成功更新并且提交。

Update    scott.dept  Set  dname='KKK'  Where  deptno=30 

 

 

 

另起会话

SQLselect  *  From  v$lock  Where  Sid  In(144,151,112order  by  sid;

 

ADDR                          KADDR                                      SID  TYPE                ID1                ID2            LMODE        REQUEST            CTIME            BLOCK

----------------  ----------------  ----------  ----  ----------  ----------  ----------  ----------  ----------  ----------

00000000D941FEB0  00000000D941FED8                112  TM                51151                    0                    0                    4                790                    0

00000000D941FDB0  00000000D941FDD8                112  TM                51149                    0                    3                    0                790                    0

00000000D941FAB0  00000000D941FAD8                144  TM                51151                    0                    6                    0              1126                    1

00000000DAE62B48  00000000DAE62CD0                144  TX              589856            26294                    6                    0              1126                    0

00000000D941FBB0  00000000D941FBD8                151  TM                51149                    0                    2                    0              1111                    0

00000000D941FCB0  00000000D941FCD8                151  TM                51151                    0                    0                    3              1111                    0

 

ID20时,ID1为对象号

 

Select  *  From  dba_objects  aa  Where  aa.object_name='EMP'    --51151

Select  *  From  dba_objects  aa  Where  aa.object_name='DEPT'  --51149

 

 

结论:在更新dept表的deptno时,需要向emp上面加4级锁S,4级锁和3,5,6级锁冲突。emp表上

在第一部已经加了6级锁了。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/10678398/viewspace-720993/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/10678398/viewspace-720993/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值