`
MyDicta
  • 浏览: 18841 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Oracle 级联删除约束后索引对象仍然存在

 
阅读更多

Oracle 数据库里可能因索引与约束建立的依赖关系不同,在级联删除约束后索引对象可能仍然存在

 

示例:  

 

-- 建表

 

 

create table test_tmp

as

select rownum as task_id  from dual connect by rownum <= 10 ;  
 

 

-- 先建立索引

create unique index PK_TASK_ID on test_tmp(task_id); 
 

 

 

-- 再在基于此索引建立主键约束

alter table test_tmp add constraint PK_TASK_ID  primary key (task_id) using index PK_TASK_ID; 
 

 

 

 

-- 级联删除约束

alter table test_tmp drop constraint PK_TASK_ID cascade ; 
 

 

 

-- 此时发现仅仅只删除了主键约束,索引却保留了下来

select * from all_objects t where t.object_name= 'PK_TASK_ID' ; -- 索引返回

select * from all_constraints t where t.constraint_name= 'PK_TASK_ID' ; -- 无结果 
 

 

-- 解决办法,无论索引是否事先存在都可以成功执行

alter table test_tmp drop constraint PK_TASK_ID cascade drop index ;
 

 


有时在丢掉约束后,发现主键字段依然保持着非空属性,这也意味约束建立之前,此字段被设置成了非空;若索引是基于主键约束而生成的,那直接删除约束后索引与非空属性也随即丢掉了

 

 

 

 

 

 

 

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics