首页 > Linux操作系统 > Linux操作系统 > 删除主键约束时是否删除索引
问题:
删除主键时是否可以删除索引?答案是,是否删除索引取决于索引是创建主键时自动创建的,还是创建主键前手工创建的。
如果期望删除主键时,同时删除索引,安全的做法是增加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/,如需转载,请注明出处,否则将追究法律责任。