PK / UK 索引在 Oracle SQL DEVELOPER 示例 HR 用户



在Oracles sql数据库11g上,我有示例DB。我了解一切,除了PK/UK索引的含义(我知道这个快捷方式代表什么)以及为什么架构中包含的每个关系都到达那里:来自某个子端表的"country_c_id_pk"。这个字段是什么,其中DB的每个关系都有相同的数据?第一张图片显示了整个表和其他一些关系的属性。

https://i.stack.imgur.com/CxGS0.jpg : 一般视图

https://i.stack.imgur.com/Y9AvS.png

https://i.stack.imgur.com/B51Xs.png

https://i.stack.imgur.com/JL1qa.png

好的,你知道PK是什么意思,英国是什么意思。下一个问题 - 数据库如何维护这些约束。

如果你有一个包含 1'000'000'000 条记录的表,并且你想插入另一个,那么从头到尾扫描它并检查"这里有相等的 id 吗?这样做是非常可悲的。取而代之的是,当有人创建 PK 或 UK,数据库检查表是否在这些列上具有索引。如果索引存在 - 数据库使用它来检查 ID 的存在。如果未找到适当的索引 - 数据库会自动创建它。

此属性显示将使用哪个索引。

下一个问题是为什么所有表在这里都有相等的值。我想这只是一个错误。一百万个 SQLDeveloper 错误之一。如果你想知道真相,请执行以下命令:

select
  t.TABLE_NAME,
  c.CONSTRAINT_NAME,
  c.INDEX_NAME
from
  user_tables t,
  user_constraints c
where
  t.TABLE_NAME = c.TABLE_NAME and
  c.CONSTRAINT_TYPE = 'P'

在大多数情况下,约束名称和索引名称是相同的,这意味着自动创建的索引。但在某些情况下,开发人员首先创建索引,然后约束使用此索引,如果开发人员同时命名它们,则名称可能会有所不同。

最新更新