mssql sqlserver 唯一索引 唯一约束 执行顺序


摘要:
下文将展示,如果表同时存在”唯一索引”、”唯一约束”时,
如果向表中插入相同数据时,表触发现象,
通过下文的示例演示:
索引和约束的触发顺序,根据创建顺序,如果先创建索引,那么就先触发索引,反之如果先创建约束,就触发约束。


例1:
创建表时,先创建唯一索引,后创建唯一约束

   create table A(keyId int identity(1,1),name varchar(20),name2 varchar(30))
go 
create unique index ix_a on A(name)  ---创建 name 唯一索引
go
alter table A add constraint un_A_Name unique(name) ---创建 name 唯一约束
go
----插入数据---
insert into A(name,name2)values('a','b')
go
insert into A(name,name2)values('a','b')
/*
消息 2601,级别 14,状态 1,第 1 行
不能在具有唯一索引 'ix_a' 的对象 'dbo.A' 中插入重复键的行。
语句已终止。
*/
go
truncate table A
drop     table A
go
 

mssql_sqlserver_唯一索引_唯一约束

mssql_sqlserver_唯一索引_唯一约束


———————————
例2:
创建表时,先创建唯一约束,后创建唯一索引

 create table A(keyId int identity(1,1),name varchar(20),name2 varchar(30))
go 
alter table A add constraint un_A_Name unique(name) ---唯一约束
go
create unique index ix_a on A(name2)                ---唯一索引
go
----插入数据---
insert into A(name,name2)values('a','b')
go
insert into A(name,name2)values('a','b')
/*
消息 2627,级别 14,状态 1,第 1 行
违反了 UNIQUE KEY 约束 'un_A_Name'。不能在对象 'dbo.A' 中插入重复键。
语句已终止。
*/
go
truncate table A
drop     table A
go
mssql_sqlserver_唯一约束_唯一索引

mssql_sqlserver_唯一约束_唯一索引