日期:2014-05-17  浏览次数:20918 次

插入数据时为什么会造成锁?
表A,表B,表C

表B是表A子表,表C是表B子表,就是说B有外键指向A的主键,C有外键指向B的主键。

现在我对表B进行insert操作,并且事务不提交。

这个时候通过观察V$LOCKED_OBJECT视图,可以发现在表A和表C上形成了ROW-X(SX)的行锁。

我就不明白这锁造成的原因是什么?
表B新增记录,为什么会影响到它的父表和子表呢?

------解决方案--------------------
当表B做insert时,它会锁定A表的父记录,以避免该记录被删除或主键被UPDATE。
与此同时,也会阻塞其他会话对C表的与B表新插入主键关联的insert操作以保证一致性
------解决方案--------------------
关键在与你的外键。