手動刪除資料庫中冗餘資料可能遇到外來鍵關聯導致資料無法刪除的問題。這個問題的解決及思考記錄如下:
問題的產生是因為在資料庫設計的時候,在建立外來鍵關聯的時候沒有設定級聯刪除,也就是說在設定外來鍵的時候並沒有加上on delete cascade限定。對於這個問題,我的想法是:在資料庫設計的時候一般情況下都是應該加上這樣的限制的。如果說擔心「級聯刪除」可能會誤刪有用的資料,這種情況如果真的發生的話,那麼就應該在資料庫的設計上找原因了。
如果在資料庫設計的時候設定了級聯刪除,那麼本文提到的問題是不會發生的。如果不幸這樣的狀況發生了,那麼可以根據它提示的關聯外來鍵,到user_constraints表中按constraint_name查詢到唯一的記錄,當然查詢這個系統檢視的使用者許可權應該比較高,然後在記錄中找到table_name,最後編輯表的外來鍵關聯,將on delete觸發的動作改為cascade。如果資料庫中資料庫表很多,關聯關係比較複雜,那麼很可能在遇到問題之後要修改的外來鍵關聯時的級聯刪除不止乙個兩個。
此外,說兩個題外話:
第一,設定外來鍵關聯的時候,級聯操作有三種設定方式:
預設無動作:on delete no action;
置空:on delete set null;
級聯刪除:on delete cascade。
第二,在drop表的時候,用drop table cascade constraints語句,只會刪除子表與父表之間的關聯關係,不會刪除子表中關聯父表的那些記錄。
oracle 外來鍵無索引導致鎖
摘自tom大師的語句,外來鍵不加索引 select table name,owner constraint name,cname1 nvl2 cname2,cname2,null nvl2 cname3,cname3,null nvl2 cname4,cname4,null nvl2 cname5,...
oracle資料遷移解決外來鍵關聯
在做資料遷移的時候,最蛋疼的就是資料之間的外來鍵關聯.這種硬關聯在來回的導資料的時候也特別的讓人糾結.我們的系統中,企業基本資訊 base qyjbxx 和人員基本資訊 base ryjbxx 的關聯是通過企業人員關係表 base qyrygxb 來關聯的.base開頭的表示我們的基礎資料,企業在做...
關聯 外來鍵問題
外來鍵問題 外來鍵一定是每個表的主鍵關聯問題 兩個表之間有聯絡,是通過外來鍵的設定模型中如果有外來鍵和多對多字段,建立的時候外來鍵必須首先繫結,然後儲存,才能新增多對多字段。relationships 主要有三類 many to one,many to many,one to one class s...