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...