读书人

插入数据时为什么会造成锁?解决方法

发布时间: 2013-01-26 13:47:03 作者: rapoo

插入数据时为什么会造成锁?
表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操作以保证一致性
[解决办法]
关键在与你的外键。

读书人网 >oracle

热点推荐