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

Posted

tags:

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

“唯一性约束”和“唯一性索引”是不同的。
一、 建立唯一性约束的语法,使用create table或者alter table
1. 在字段级约束定义
-- 命名
create table tmp_table
(
a int constraint pk_tmp_table_a primary key,
b varchar(10) constraint uq_tmp_table_b unique
)
-- 不命名
create table tmp_table
(
a int primary key,
b varchar(10) unique
)
2. 在表约束定义
-- 命名
create table tmp_table
(
a int,
b varchar(10),
constraint pk_tmp_table_a primary key(a),
constraint uq_tmp_table_b unique(b ASC)
)
-- 不命名
create table tmp_table
(
a int,
b varchar(10),
primary key(a),
unique(b ASC)
)
二、 建立唯一性索引的语法,使用create index
-- 必须命名
CREATE UNIQUE NONCLUSTERED INDEX xak_tmp_table_b ON tmp_table(b DESC)
--不指定[CLUSTERED | NONCLUSTERED],缺省为NONCLUSTERED(非聚集)
三、当在表中创建主键约束或者唯一性键约束时,SQL Server自动创建一个唯一性索引
这是以上脚本建立的约束:

constraint_type constraint_name constraint_keys
PRIMARY KEY (clustered) pk_tmp_table_a a
UNIQUE (non-clustered) uq_tmp_table_b b

这是索引:

index_name index_description index_keys
pk_tmp_table_a clustered, unique, primary key located on PRIMARY a
uq_tmp_table_b nonclustered, unique, unique key located on PRIMARY b
xak_tmp_table_b nonclustered, unique located on PRIMARY b(-)

可以看出,为主键和唯一性约束自动建立了同名唯一性索引。
现在为表建立了排序顺序相反的两个索引uq_tmp_table_b和xak_tmp_table_b,不知道数据库会怎么工作?

四、题外话
表级约束中可以指定列的排序顺序(col_name ASC | DESC),但不能指定列的NULL约束;
字段级约束中可以指定列的NULL约束,但不能指定列的排序顺序;
参考技术A

    唯一性约束

       1) 唯一性约束用来限制不受主键约束的列上的数据的唯一性,用于作为访问某行的可选手段,一个表上可以放置多个唯一性约束.
       2) 只要唯一就可以更新. 
       3) 即表中任意两行在  指定列上都不允许有相同的值,允许空(NULL).
       4) 一个表上可以放置多个唯一性约束

    唯一性索引

 创建唯一索引可以确保任何生成重复键值的尝试都会失败。

    约束和索引, 前者是用来检查数据的正确性,后者用来实现数据查询的优化,目的不同。
    唯一性约束与唯一索引有所不同:
    1)创建唯一约束会在Oracle中创建一个Constraint,同时也会创建一个该约束对应的唯一索引。
    2).创建唯一索引只会创建一个唯一索引,不会创建Constraint。
    也就是说其实唯一约束是通过创建唯一索引来实现的。
    在删除时这两者也有一定的区别:
    删除唯一约束时可以只删除约束而不删除对应的索引,所以对应的列还是必须唯一的,
    而删除了唯一索引的话就可以插入不唯一的值。

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

Oracle数据库主键约束与唯一索引有什么区别?具体区别在那里,可以举例说明.

我想不仅仅是Oracle,其他数据库也一样的,Unique约束和Primary key约束用来保证同一表中指定的列上没有重复值,这两个约束都产生唯一索引确保数据一致性,默认情况下,Unique约束产生唯一的非聚集索引,Primary key约束产生唯一的聚集索引。Primary key约束比Unique约束严格:Primary key列不允许有空值,Unique列允许有空值。 参考技术A 主键约束是不可以为空也不可以重复 而唯一约束是可以为空不可以重复 就是这个区别 参考技术B 主键约束包括唯一索引和非空约束

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

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

MYSQL中唯一约束和唯一索引的区别

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

mysql中唯一约束、key和索引的区别,unique key 就是唯一约束吗,新手麻烦指点,谢谢

SQLServer主键和唯一约束的区别

oracle 唯一约束 为啥 唯一索引