将外键添加到数据库表的准则 - Oracle

时间:2012-03-23 17:21:11

标签: sql oracle

在阅读this链接时,我不明白通过在外键列上添加索引来避免表锁定。谁能帮助我理解这一点?

此外,我从来不知道在阅读相同链接之前向外键添加索引的重要性(感谢Thomas Kyte和论坛!)。任何人都可以请指出我在实现外键时需要考虑的更多重要实现。

2 个答案:

答案 0 :(得分:4)

假设有两个表PARENTCHILD。假设CHILD.PARENT_ID引用PARENT.PARENT_ID并且CHILD.PARENT_ID是必需(非空)列,并且CHILD.PARENT_ID.上没有索引

更新PARENT_ID或从PARENT删除记录时,Oracle需要阻止新的交易在CHILD中同时添加新记录,并删除PARENT_ID的值。 Oracle可以使用针对CHILD.PARENT_ID的索引来检查哪些记录(如果有的话)可能会受到影响 - 并阻止使用受PARENT_ID影响的新行,直到针对{{1}的活动提交或回滚。

但是,此并发问题不存在此类索引。所以Oracle使用它拥有的唯一工具 - 完全锁定PARENT表,直到针对CHILD的操作提交或回滚。

答案 1 :(得分:1)

我不确定自己是否完全理解它,但您是否已阅读the Concepts Guide所说的内容?这解释了发生什么,但我不确定它是否解释了为什么