關於外來鍵的理解和實驗步驟
我的實驗過程
1.建立兩個表
create table zb(n number not null primary key,b varchar2(10),c date default sysdate);
create table wb(n number not null primary key references zb(n),c date default sysdate);
2.給zb及wb分別insert into資料
insert into zb(n,b) values(3,'c');
insert into wb(n) values(1);
當給外表insert into上面三行(即與主表一樣的n號時,系統沒問題,錯誤產生)
當insert into 不相同的n號時
如:
insert into wb(n) values(4);
insert into wb(n) values(4)
Error at line 1
ORA-02291: integrity constraint (CSM.SYS_C00204894) violated - parent key not found
Script. Terminated on line 4.
說父表中沒有資料發現。
說明什麼,要麼wb的行數少於zb的,要麼最多和zb的行數一樣多。
也就是說wb的n列,必須是zb的n列號碼的子集。
3.測一下關於刪除的例子:
delete from zb where n=1;
delete from zb where n=1
Error at line 1
ORA-02292: integrity constraint (CSM.SYS_C00204894) violated - child record found
Script. Terminated on line 5.
說明是互相約束的,如果刪除zb即父表的行,那個n列中的值如果在wb中,那就出現上面的錯誤,
如果不在,即:
insert into zb(n,b) values(5,'c');
commit;
這個n=5不在wb中
即,再測試:
delete from zb where n=5;
1 row deleted.
說明是可以刪除的
4.如何解決上述錯誤?
解決辦法:
1.create table wb(n number not null primary key references zb(n) on delete cascade,c date default sysdate);
建立一個加on delete cascade引數的外來鍵
給表插入上面的資料。
2.刪除zb(即父表中的資料,n號在wb中)
delete from zb where n=2;
1 row deleted.
這說明這樣是可以刪除的。
叉插入的情況(主要測試wb)
插入依舊要遵守規則 ,在子表即wb中的行n號碼,是zb中的n號的子集才成,如果不是,系統拒絕插入。
另:
如果外來鍵的定義中沒有on delete cascade引數
則刪除zb的行,n的號在wb中的n號的話,則需要先刪除wb中的相應的行,才能刪除zb的行。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/196700/viewspace-722365/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 實施 GitOps 的三個關鍵步驟Git
- 實現 MongoDB 外來鍵關聯MongoDB
- 【實驗】【外來鍵】小議外來鍵約束對應用程式的影響
- 安裝aix rac的關鍵步驟AI
- 關於外來鍵約束和對應主鍵資訊的查詢指令碼指令碼
- 父表修改與外來鍵的關係(主鍵DML與外來鍵的關係)
- 關於 oracle 外來鍵引用 與 goldengateOracleGo
- Django(15)外來鍵和表關係Django
- 關於資料遷移的方法、步驟和心得
- Logstash 的命令列入門 ( 附上相關實驗步驟 )命令列
- oracle 主外來鍵關係及實驗Oracle
- mysql啟動和關閉外來鍵約束MySql
- 中小企業實現專案管理數字化的關鍵步驟專案管理
- SQL的主鍵和外來鍵約束SQL
- SIFT定位演算法關鍵步驟的說明演算法
- 關於實踐CMMI高成熟度等級的實踐步驟
- 和外來鍵相關的阻塞和死鎖問題總結
- 關於ASM的一點使用上的步驟ASM
- 新的主鍵和外來鍵的語法
- 將移動 App 創意變成現實的 10 個關鍵步驟APP
- 怎樣成為解決問題的高手?——關於問題解決的關鍵4步驟
- 和外來鍵相關的一點效能問題總結!
- 關於資料庫表的設計步驟資料庫
- SQL Server 遷移至MySQL 關鍵步驟的梳理總結ServerMySql
- 正確做資料治理的10個關鍵步驟
- 專案管理計劃制定的四個關鍵步驟專案管理
- ServiceHot 專家帶你迅速掌握 ITSM 實施的五大關鍵步驟
- 無索引的外來鍵之主表子表DML操作實驗及結論索引
- 網路佈線測試中的三個關鍵步驟
- CRM理想關鍵步驟:完善客戶資訊分析能力
- 關於網友的獲取MSSQL外來鍵資訊的問題的探討SQL
- 關於Flutter空安全的一些使用經驗和理解Flutter
- oracle goldengate 初始化實驗步驟OracleGo
- 修改外來鍵為validate時需要驗證資料是否符合外來鍵約束
- MYSQL的外來鍵MySql
- Oracle查詢表的外來鍵引用關係Oracle
- 關於imp和exp的有關理解
- Django中ORM外來鍵和表的關係(Django程式設計-4)DjangoORM程式設計