最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

Oracle主键、唯一键与唯一索引的区别

来源:动视网 责编:小采 时间:2020-11-09 10:39:03
文档

Oracle主键、唯一键与唯一索引的区别

Oracle主键、唯一键与唯一索引的区别:一般,我们看到术语ldquo;索引rdquo;和ldquo;键rdquo;交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结
推荐度:
导读Oracle主键、唯一键与唯一索引的区别:一般,我们看到术语ldquo;索引rdquo;和ldquo;键rdquo;交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结


一般,我们看到术语ldquo;索引rdquo;和ldquo;键rdquo;交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结

一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结构,键纯粹是一个逻辑概念。键代表创建来实施业务规则的完整性约束。索引和键的混淆通常是由于数据库使用索引来实施完整性约束。

推荐阅读:

Oracle主键约束自动建立索引问题

Oracle 10g删除主键约束后无法删除唯一约束索引问题的模拟与分析

介绍Oracle Virtual Index虚拟索引

Oracle中检查是否需要重构索引

Oracle case when索引 空值索引 位图索引

Oracle分析表和索引

Oracle主键约束自动建立索引问题



接下来我们看看数据库中的主键约束、唯一键约束和唯一索引的区别。
SQL> select * from v$version;
BANNER
--------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
PL/SQL Release 11.2.0.1.0 - Production
CORE 11.2.0.1.0 Production
TNS for Linux: Version 11.2.0.1.0 - Production
NLSRTL Version 11.2.0.1.0 - Production

SQL> create table test (
2 id int,
3 name varchar2(20),
4 constraint pk_test primary key(id))
5 tablespace users;
Table created.

SQL> select constraint_name, constraint_type from user_constraints;
CONSTRAINT_NAME C
------------------------------ -
PK_TEST P

在test表中,我们指定了ID列作为主键,Oracle数据库会自动创建一个同名的唯一索引:
SQL> select index_name, index_type, uniqueness, tablespace_name
2 from user_indexes
3 where table_owner='SCOTT'
4 and table_name = 'TEST';
INDEX_NAME INDEX_TYPE UNIQUENES TABLESPACE_NAME
-------------------- -------------------- --------- ------------------------------
PK_TEST NORMAL UNIQUE USERS

此时,如果我们再试图在ID列上创建一个唯一索引,Oracle会报错,因为该列上已经存在一个唯一索引:
SQL> create unique index idx_test_uk on test(id);
create unique index idx_test_uk on test(id)
*
ERROR at line 1:
ORA-01408: such column list already indexed

即使创建非唯一索引也不行:
SQL> create index idx_test_id on test(id);
create index idx_test_id on test(id)
*
ERROR at line 1:
ORA-01408: such column list already indexed

那么唯一键约束的情况是怎样的呢?
SQL> drop table test purge;
Table dropped.

SQL> create table test(
2 id int,
3 name varchar2(20),
4 constraint uk_test unique(id));
Table created.

SQL> select constraint_name, constraint_type from user_constraints;
CONSTRAINT_NAME C
------------------------------ -
UK_TEST U

查看此时的索引情况:
SQL> select index_name, index_type, uniqueness, tablespace_name
2 from user_indexes
3 where table_owner='SCOTT'
4 and table_name = 'TEST';
INDEX_NAME INDEX_TYPE UNIQUENES TABLESPACE_NAME
-------------------- -------------------- --------- ------------------------------
UK_TEST NORMAL UNIQUE USERS
Oracle同样自动创建了一个同名的唯一索引,而且也不允许再在此列上创建唯一索引或非唯一索引。

我们知道,主键约束要求列值非空(NOT NULL),那么唯一键约束是否也要求非空呢?
SQL> insert into test values(1, 'Sally');
1 row created.

SQL> insert into test values(null, 'Tony');
1 row created.

SQL> insert into test values(null, 'Jack');
1 row created.

SQL> select * from test;
ID NAME
---------- --------------------
1 Sally
Tony
Jack

从实验结果来看,唯一键约束并没有非空要求。

接下来我们看看唯一索引对列值的非空要求有什么不同。

SQL> drop table test purge;
Table dropped.

SQL> create table test(
2 id int,
3 name varchar2(20));
Table created.

SQL> create unique index idx_test_id on test (id);
Index created.

SQL> insert into test values(1, 'Sally');
1 row created.

SQL> insert into test values(null, 'Tony');
1 row created.

SQL> insert into test values(null, 'Jack');
1 row created.

SQL> select * from test;
ID NAME
---------- --------------------
1 Sally
Tony
Jack

通过实验,我们看出唯一索引与唯一键约束一样对列值非空不做要求。

继续阅读本文的精彩内容请看第2页:

文档

Oracle主键、唯一键与唯一索引的区别

Oracle主键、唯一键与唯一索引的区别:一般,我们看到术语ldquo;索引rdquo;和ldquo;键rdquo;交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结 一般,我们看到术语“索引”和“键”交换使用,但实际上这两个是不同的。索引是存储在数据库中的一个物理结
推荐度:
标签: 区别 主键 的区别
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top