ITPub博客

首页 > 数据库 > 数据库开发技术 > 唯一性约束和唯一性索引的区别

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

原创 数据库开发技术 作者:kitesky 时间:2005-04-19 20:13:57 1 删除 编辑

“唯一性约束”和“唯一性索引”是不同的。
一、 建立唯一性约束的语法,使用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_typeconstraint_nameconstraint_keys
PRIMARY KEY (clustered)pk_tmp_table_aa
UNIQUE (non-clustered)uq_tmp_table_bb


这是索引:

index_nameindex_descriptionindex_keys
pk_tmp_table_aclustered, unique, primary key located on PRIMARYa
uq_tmp_table_bnonclustered, unique, unique key located on PRIMARYb
xak_tmp_table_bnonclustered, unique located on PRIMARYb(-)

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

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

[@more@]

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/66009/viewspace-796420/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2009-04-22

  • 博文量
    273
  • 访问量
    2169560