Oracle 級聯刪除約束後索引物件仍然存在

2021-08-26 13:33:48 字數 1014 閱讀 6633

oracle 資料庫裡可能因索引與約束建立的依賴關係不同,在級聯刪除約束後索引物件可能仍然存在

示例:

-- 建表

create table test_tmp

asselect 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 ;

有時在丟掉約束後,發現主鍵字段依然保持著非空屬性,這也意味約束建立之前,此字段被設定成了非空;若索引是基於主鍵約束而生成的,那直接刪除約束後索引與非空屬性也隨即丟掉了

oracle 級聯刪除

1 查詢外來鍵及父表 select a.constraint name 外鍵名,a.table name 子表,b.table name 父表 from user constraints a,user constraints b where a.constraint type r and b.con...

oracle級聯刪除

oracle中使用on delete cascade和on delete set null來建立外來鍵 其面我們介紹了建立外來鍵約束時如果使用oracle預設的建立方式,在刪除被參照的資料時,將無法被刪除,這一點在oracle9i中給了我們更多靈活的選擇,我們可是使用on delete cascad...

oracle級聯刪除

oracle中使用on delete cascade和on delete set null來建立外來鍵 其面我們介紹了建立外來鍵約束時如果使用oracle預設的建立方式,在刪除被參照的資料時,將無法被刪除,這一點在oracle9i中給了我們更多靈活的選擇,我們可是使用on delete cascad...