当前位置:首页 > SQL Server > 正文内容

SQL Server 中的条件索引实现部分数据唯一的约束

管理员6年前 (2014-04-24)SQL Server466

有同事提到这样的一个需求,有一个数据字典表,存储着要引用的数据项目,要求所有的正在使用的数据项,不能重名,而标记删除的则不要求,问是否可以在数据库加上这个限制。

SQL Server 自身已提供这样的功能,在创建索引时,可以使用 where 子句,对部分数据进行索引,而不是所有的行,示例如下:

1、先创建一张表,并创建一个带条件的唯一索引(实际上实现约束的功能),保证 deleted = 0 的行,name 列不能重复。

create table test(id int primary key, name varchar(10), deleted int)
go
create unique index ix_test_name on test(name) where deleted = 0;
go
insert into test values(1,'A', 0),(2,'B',0),(3, 'C', 0)
go
update statistics test with fullscan
go

2、的测试一个唯一索引是否生效

print '这个语句会失败'
insert into test values(4, 'A', 0)
go
print '这个会成功的,运行多次也会成功'
update test set deleted = 1 where name ='A'
insert into test values(4, 'A', 0)
go

3、我们可以查询一下,索引中的记录数,PK 主键中的记录数为 4 行,而索引中为 3 行。

indid  name                         rows
------ ---------------------------- -----------
1      PK__test__3213E83F5CD6CB2B   4
2      ix_test_id                   3

(2 行受影响)


打赏 支付宝打赏 微信打赏
    扫描二维码至手机访问

    扫描二维码推送至手机访问。

    版权声明:本文由卖水果的net发布,如需转载请注明出处。

    转载请注明出处:http://www.msgde.net/mssql/oracle_create_condition_index.html

    分享给朋友:

    发表评论

    访客

    ◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。