首页 > 数据库 > 数据库开发技术 > 唯一性约束和唯一性索引的区别
“唯一性约束”和“唯一性索引”是不同的。
一、 建立唯一性约束的语法,使用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(-) |
四、题外话
表级约束中可以指定列的排序顺序(col_name ASC | DESC),但不能指定列的NULL约束;
字段级约束中可以指定列的NULL约束,但不能指定列的排序顺序;
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/66009/viewspace-796420/ ,如需转载,请注明出处,否则将追究法律责任。