现在的位置: 首页 > 综合 > 正文

如何删除通过主键和唯一约束创建的索引

2012年10月09日 ⁄ 综合 ⁄ 共 1010字 ⁄ 字号 评论关闭
我们知道给表建立索引有助于加快对表的查询速度和增强表的列的唯一性,同时我们也知道给一个表增加主键能够自动在主键列上建立一个聚集索引,或者给一个表增加一个唯一约束也会自动增加一个唯一索,对于通过主键和唯一约束创建的索引是不能够通过DROP INDEX来删除的。请看以下示例语句:

  --首先,创建一个表test,无主键和唯一约束
  create table test(a int,b int)
  --修改表test使列b不能为空
  alter table test alter column b int not null
  --修改表test,在列b上建立主键,主键名称为pk,这会自动给表test添加聚集索引
  alter table test add constraint pk primary key(b)
  --查看表test上的索引
  sp_helpindex test
  这时会看到在表test上有一个名为pk的聚集索引。如果我们采用drop index test.pk来删除该索引,则会看到如下的错误提示:
  

  那如果我们确实想删除该索引又该如何做呢?其实很简单,既然它是通过主键自动增加的索引,则通过删除主键来做到自动删除该索引,请看如下语句:
  --通过删除主键约束来自动删除由该主键约束创建出来的聚集索引
  alter table test drop constraint pk
  那么这个表上的由添加主键约束而创建出来的聚集索引随着主键的删除而自动删除了。
  对于如何删除通过唯一约束创建的唯一索引,原理和删除通过主键约束创建的索引是类似的。请看如下示例:
  --修改表test在列a上添加唯一约束,主键名称为U_test,这会自动给表test添加唯一索引
  alter table test add CONSTRAINT U_test UNIQUE (a)
  --查看表test上的索引
  sp_helpindex test
  这时会看到表test上有一个名为U_test的唯一索引。如果我们采用drop index test.U_test语句来删除该索引,则会看到如下的错误提示:
   

  我们应该通过删除唯一约束来自动的删除该唯一索引。正确地删除该索引的语句应该为如下所示:
  --通过删除唯一约束来自动删除由该唯一约束创建出来的唯一索引
  alter table test drop CONSTRAINT U_test
  以上示例在SQL Server2000企业版上验证通过。

抱歉!评论已关闭.