oracle主外键锁_lock_约束

以scott用户为例.

前言
  1,emp是子表,dept是主表,
        2,emp的列deptno外键依赖于dept之deptno
        3,emp的列deptno仅构建外键约束,但未建立索引
操作:
    ---在一个会话
  1,delete from emp where emp.deptno=10;
    --以sysdba在另一个会话查询上述会话
  2,select * from v$lock where sid in(152);
    ADDR     KADDR           SID TYPE        ID1        ID2      LMODE    REQUEST      CTIME      BLOCK
-------- -------- ---------- ---- ---------- ---------- ---------- ---------- ---------- ----------
A2F4F9E8 A2F4FA00        152 TM        51249          0          2          0        714          0 --51249是dept
A2F4FAAC A2F4FAC4       152 TM        51251          0          3          0        714          0 --51251是emp
A2FC79E4 A2FC7A08       152 TX       524321       3234          6          0        714          0
   --第三个新会话
2,delete from dept where deptno=10;此时就会发生锁等待了


小结:
1,产生此种情形,须先执行删除子表的操作,而非主表(注:如果先删除主表,会提示违反外键约束之类的信息)

请使用浏览器的分享功能分享到微信等