ITPub博客

首页 > Linux操作系统 > Linux操作系统 > 删除主键约束时是否删除索引

删除主键约束时是否删除索引

原创 Linux操作系统 作者:redhouser 时间:2011-06-02 15:03:16 0 删除 编辑

问题:
    删除主键时是否可以删除索引?答案是,是否删除索引取决于索引是创建主键时自动创建的,还是创建主键前手工创建的。
    如果期望删除主键时,同时删除索引,安全的做法是增加drop index选项。另外,如果为了防止因存在外键引用而删除失败,可以增加cascade选项。

1,测试无drop index/keep index选项时的情况
1.1手工创建索引,后增加主键
--建表
drop table test;
create table test(ID INTEGER not null);

--建主键
create unique index PK_TEST on TEST(ID);

alter table TEST
add CONSTRAINT PK_TEST PRIMARY KEY (ID) using index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                      

--删除主键
alter table TEST drop primary key;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                    
==>没有删除索引

1.2增加主键,自动创建索引
--建表
drop table test;
create table test(ID INTEGER not null);

--建主键
alter table TEST
add CONSTRAINT PK_TEST PRIMARY KEY (ID) using index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                      

--删除主键
alter table TEST drop primary key;

select index_name from user_indexes where index_name='PK_TEST';
无 
==>删除索引


2,测试drop index选项时的情况
2.1手工创建索引,后增加主键
--建表
drop table test;
create table test(ID INTEGER not null);

--建主键
create unique index PK_TEST on TEST(ID);

alter table TEST
add CONSTRAINT PK_TEST PRIMARY KEY (ID) using index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                      

--删除主键
alter table TEST drop primary key drop index;

select index_name from user_indexes where index_name='PK_TEST';
无                    
==>删除索引

2.2增加主键,自动创建索引
--建表
drop table test;
create table test(ID INTEGER not null);

--建主键
alter table TEST
add CONSTRAINT PK_TEST PRIMARY KEY (ID) using index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                      

--删除主键
alter table TEST drop primary key drop index;

select index_name from user_indexes where index_name='PK_TEST';
无                    
==>删除索引

3,测试keep index选项时的情况
3.1手工创建索引,后增加主键
--建表
drop table test;
create table test(ID INTEGER not null);

--建主键
create unique index PK_TEST on TEST(ID);

alter table TEST
add CONSTRAINT PK_TEST PRIMARY KEY (ID) using index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                      

--删除主键
alter table TEST drop primary key keep index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                    
==>没有删除索引

3.2增加主键,自动创建索引
--建表
drop table test;
create table test(ID INTEGER not null);

--建主键
alter table TEST
add CONSTRAINT PK_TEST PRIMARY KEY (ID) using index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                      

--删除主键
alter table TEST drop primary key keep index;

select index_name from user_indexes where index_name='PK_TEST';
PK_TEST                    
==>没有删除索引

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

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

注册时间:2011-05-26

  • 博文量
    211
  • 访问量
    810011