参考:Oracle documentation" Oracle数据库使用索引强制执行所有PRIMARY KEY约束"
Q&#39>
1>我不明白有一个约束和一个密钥背后的原因(也会实现约束,即在这种情况下PRIMARY KEY约束和PRIMARY KEY索引)?
2 - ;构建数据库表时应该实现密钥还是约束?
3>是否有任何情况下使用一个而不是另一个是+ ve / -ve因子?
答案 0 :(得分:2)
我不确定我是否理解这个问题。
在Oracle中,当您声明主键约束时,如果没有合适的索引来强制执行约束,Oracle将隐式创建一个索引来强制执行该约束。它不是“或者/或”的情况,你创建一个或另一个 - 你总是会同时拥有主键约束和强制该约束的索引。
您可以选择是在创建约束之前单独创建索引,还是告诉Oracle使用索引来强制执行约束,或者是否允许Oracle隐式创建索引。一般来说,选择哪种方法并不重要,但有些事情需要注意。
创建一个非唯一复合索引的示例,其名称与主键约束的名称不同,然后用于强制执行主键约束。
SQL> create table foo( col1 number, col2 number );
Table created.
Elapsed: 00:00:00.01
SQL> create index idx_foo on foo( col1, col2 );
Index created.
Elapsed: 00:00:00.00
SQL> alter table foo
2 add constraint pk_foo
3 primary key( col1 )
4 using index idx_foo;
Table altered.
Elapsed: 00:00:00.13
答案 1 :(得分:0)
1) 我所知道的几乎所有数据库管理系统都是通过创建uniqe索引来实现主键约束。这是“最简单”的方法,如何有效地防止重复的条目?
2)你是什么意思“我应该在构建数据库表时实现密钥还是约束?” “Containts”有很多含义:主键,检查,默认,唯一......并非所有这些都强制创建索引。没有“一件事”或“另一件事”的决定,这取决于你想要实现的目标。