oracle主外來鍵鎖_lock_約束

wisdomone1發表於2012-06-01
以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,產生此種情形,須先執行刪除子表的操作,而非主表(注:如果先刪除主表,會提示違反外來鍵約束之類的資訊)

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9240380/viewspace-731655/,如需轉載,請註明出處,否則將追究法律責任。

相關文章