oracle 唯一约束 为啥 唯一索引

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了oracle 唯一约束 为啥 唯一索引相关的知识,希望对你有一定的参考价值。

参考技术A 在使用TOAD来操作Oracle数据库时,会注意到创建约束时有Primary
Key、Check、Unique和Foreign
Key四种类型的约束,这与SQL
Server中的约束没有什么区别,这里的Check约束除了用于一般的Check约束外,在Oracle中也用于非空约束的实现。也就是说如果一个字段
不允许为空,则系统将会创建一个系统的Check约束,该约束定了某字段不能为空。
除了约束,还有另外一个概念是索引,在TOAD中创建索引的界面如下:
我们可以注意到在唯一性组中有三个选项:不唯一、唯一和主键。那么创建索引时的唯一、主键与创建约束时候的唯一约束和主键约束有什么区别呢?
这里的可能容易产生误解,其实创建主键的结果是一样的,不管是在创建约束时创建还是创建索引时创建,都会创建一个主键约束和对应的一个唯一索引。
创建唯一约束与创建唯一索引有所不同:
创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。
创建唯一索引只会创建一个唯一索引,不会创建Constraint。

就是说其实唯一约束是通过创建唯一索引来实现的。对于前端开发人员来说这两者有什么区别吗?好像没有。都是不能插入重复的值。在删除时这两者也有一定的区
别,删除唯一约束时可以只删除约束而不删除对应的索引,所以对于的列还是必须唯一的,而删除了唯一索引的话就可以插入不唯一的值。

oracle唯一索引与普通索引的区别和联系以及using index用法

oracle唯一索引与普通索引的区别和联系

区别:唯一索引unique index和一般索引normal index最大的差异是在索引列上增加一层唯一约束。添加唯一索引的数据列可以为空,但是只要尊在数据值,就必须是唯一的。

联系:1)unique index就是额外添加唯一性的约束。该约束严格的保证索引列的取值是唯一的,这在一些数据列上的业务约束是很重要的功能。比如一个数据列,不能作为主键,而且允许为空,但是业务上要求唯一特性,这个时候用唯一性索引就是最好的旋转。2)性能上两者并无很大区别。

 

using index用法:

create primary key …. Using index :创建主键的时候同时将其设为索引,名称与主键名称相同。

在9i之后,在创建一个PK的时候,会自动创建一个与之对应的唯一索引。(因为某个字段如果被设置为Unique便会自动被设为索引)。如果不特别指定,这个索引的表空间和表的表空间是一样的,但是不建议将两者放在一起。

一般语句格式:

Create table test(name varchar(10));

Alter table test add primary key(name) tablespace tablespace1;

以上的处理方式有两个不好的地方,第一是无法指定索引的名称,第二无法指定索引存放的表空间。为了避免这种错误,最后按照以下方式来定义表格与表空间。

Create table test_uid(name varchar(10),

Constraint test_uid_pk primary key(name) using index (

create unique index uid_test_uid on test_uid(name) tablespace tablespace2);

当然也可以部分处理。

Create table testone (name varchar(10 char)) tablespace1;

Alter table testone add constraint pk_testine1 primary key(name) using index tablespace tablespace2;

作为一个好习惯,不要把索引和表格的数据放在同一个表空间。

一般索引单独建一个表空间。

 

---------

本系列为最近一段时间学习oracle的学习笔记,记录于此作为自身回顾,其中有的来的网络,有的来的书籍,但时间已久,记不清哪些是引用,如是转载但没标注出,特意致歉。

 

以上是关于oracle 唯一约束 为啥 唯一索引的主要内容,如果未能解决你的问题,请参考以下文章

Oracle数据库主键约束与唯一索引有啥区别?

Oracle索引总结- Oracle唯一索引普通索引及约束的关系

忽略空间的Oracle唯一约束和唯一索引

oracle唯一索引与普通索引的区别和联系以及using index用法

唯一性约束和唯一性索引的区别

mongodb 索引唯一性约束