關於delete cascade的小實驗
關於delete cascade的小實驗
建立用於測試的三張表test_a,test_b,test_c
create table test_a(id int not null, fk int, constraint pk primary key(id));
create table test_b(id int not null, fk int, constraint pe primary key(id));
create table test_c(id int not null, fk int, constraint pr primary key(id));
ID主鍵,在FK列上建立外來鍵
插入測試資料
insert into test_a values(1,11);
insert into test_a values(2,22);
insert into test_b values(11,1);
insert into test_b values(22,2);
insert into test_c values(111,11);
insert into test_c values(222,22);
commit;
在test_b和test_c上建立外來鍵約束
alter table test_b add constraint fk_test_b foreign key (fk) references test_a(id) on delete cascade;
alter table test_c add constraint fk_test_c foreign key (fk) references test_b(id) on delete cascade;
從test_a級聯刪除id為1的行
delete from test_a where id=1;
成功
需要說明的是
1、如果僅僅在test_b上建立 on delete cascade 選項,則會出現在test_c上無法刪除的情況,因此不能成功
2、在測試過程中,如果使用truncate截斷test_a,或者test_b會出現orc-02266的情況,必須使用alter table test_b disable constraint fk_test_b;
alter table test_b disable primary key; 但是在此時會出現另一個錯誤,ora-02297,因為test_c的fk_test_c依賴test_b(id)主鍵,因此需要先
alter table test_c disable constrait fk_test_c;
3、查閱相關的資料發現Oracle沒有on update cascad 選項,參閱
外來鍵作為資料庫參照完整性的原則,其目的就是為了使相關聯的表之間保證完整,如建立約束時沒有指定on delete cascade 選項,則應該從子表依次刪除以保證參照實體的完整,如果未指定,預設應該是NO ACTION;
[@more@]來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9236282/viewspace-1029890/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 主外來鍵關聯刪除(on delete set null和on delete cascade)deleteNull
- 一個關於JAVA GC的小實驗JavaGC
- 關於JS迴圈效率小實驗JS
- Entity Framework Code-First(15):Cascade DeleteFrameworkdelete
- 關於delete,drop,truncate的問題delete
- 關於高水位線和deletedelete
- [捉蟲記錄]關於Cascade Training Error的bugAIError
- 關於ELF檔案格式的實驗
- 關於append sql hint的實驗APPSQL
- 檢視oracle 資料庫中的級聯刪除(delete cascade)Oracle資料庫delete
- 關於資料庫管理員的驗證小結資料庫
- 關於windows installer的一點小經驗(轉)Windows
- 關於HOJ的搭建和二開經驗小結
- oracle實驗記錄 (基礎,truncate與delete區別實驗)Oracledelete
- 關於計算機網路的 Wireshark 實驗計算機網路
- 關於 pipe row的用法(轉,待做實驗)
- 一次關於偷拍的網路實驗
- 關於介面實現的一個小問題
- myisam對於update,insert,delete關於auto_incremant的影響deleteREM
- innodb對於update,insert,delete關於auto_incremant的影響deleteREM
- 一個關於c++字串處理和delete[]與delete差別的問題 (轉)C++字串delete
- oracle實驗記錄 (關於表實際大小)Oracle
- 分享一個關於Cookie做的實驗結果Cookie
- 關於外來鍵的理解和實驗步驟
- 關於網路傳輸MD5 校驗實驗
- BGP小實驗
- 關於分享的小見解
- 實驗 詳解Docker的各種操作小實驗Docker
- 關於C++ delete 來釋放new分配的記憶體C++delete記憶體
- 【實驗】關於HWM(高水位)的學習與測試
- 關於我做事的方法經驗
- 關於Java Mail的身份驗證!JavaAI
- oracle實驗記錄 (恢復-rman操作delete(all) input )Oracledelete
- 關於delete還是update會產生更多日誌的問題delete
- Go - 關於 protoc 工具的小疑惑Go
- 關於微信小程式webview的使用微信小程式WebView
- 關於PostCSS的一點小科普CSS
- 那些關於Java的小祕密Java