自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Oracle外鍵與其主鍵的實(shí)際應(yīng)用方案

數(shù)據(jù)庫 Oracle
下面的文章主要介紹的是Oracle主鍵與Oracle外鍵的實(shí)際應(yīng)用,本文主要是通過相關(guān)的應(yīng)用代碼的方式來引出其實(shí)際的操作方案。

以下的文章主要是對Oracle主鍵與Oracle外鍵的實(shí)際應(yīng)用方案的介紹,此篇文章是我很然偶在一網(wǎng)站上發(fā)現(xiàn)的,如果你對Oracle主鍵與Oracle外鍵的實(shí)際應(yīng)用很感興趣的話,以下的文章就會給你提供更詳細(xì)的相關(guān)方面的知識。

  1. CREATE TABLE "SCOTT"."MID_A_TAB"  
  2. ( "A" VARCHAR2(20 BYTE),  
  3. "B" VARCHAR2(10 BYTE),  
  4. "DETPNO" VARCHAR2(10 BYTE)  
  5. )TABLESPACE "USERS" ;  
  6. CREATE TABLE "SCOTT"."MID_B_TAB"  
  7. ( "A" VARCHAR2(20 BYTE),  
  8. "B" VARCHAR2(10 BYTE),  
  9. "DEPTNO" VARCHAR2(10 BYTE)  
  10. )TABLESPACE "USERS" ;  

 

給MID_A_TAB表添加主鍵

 

  1. alter table mid_a_tab add constraint a_pk primary key (detpno); 

給MID_B_TAB表添加Oracle主鍵

 

  1. alter table mid_b_tab add constraint b_pk primary key(a); 

給子表MID_B_TAB添加Oracle外鍵,并且引用主表MID_A_TAB的DETPNO列,并通過on delete cascade指定引用行為是級聯(lián)刪除

 

  1. alter table mid_b_tab add constraint b_fk foreign key 
    (deptno) references mid_a_tab (detpno) on delete cascade; 

向這樣就創(chuàng)建了好子表和Oracle主表

向主表添加數(shù)據(jù)記錄

 

  1. SQL> insert into mid_a_tab(a,b,detpno) values('1','1','10'); 

已創(chuàng)建 1 行。

已用時間: 00: 00: 00.00

向子表添加數(shù)據(jù)

 

  1. SQL> insert into mid_b_tab(a,b,deptno) values('1','2','6');  
  2. insert into mid_b_tab values('1','2','6')  
  3. *  

 

第 1 行出現(xiàn)錯誤:

ORA-00001: 違反唯一約束條件 (SCOTT.B_PK)

已用時間: 00: 00: 00.00

可見上面的異常信息,那時因?yàn)樽颖聿迦氲膁eptno的值是6,然而此時我們主表中

detpno列只有一條記錄那就是10,所以當(dāng)子表插入數(shù)據(jù)時,在父表中不能夠找到該引用

列的記錄,所以出現(xiàn)異常。

但我們可以這樣對子表的數(shù)據(jù)的進(jìn)行插入(即:在子表的deptno列插入null,因?yàn)槲覀冊诮ū淼臅r候

并沒有對該列進(jìn)行not null的約束限制):

 

  1. SQL> insert into mid_b_tab(a,b,deptno) values('3','2',null); 

已創(chuàng)建 1 行。

已用時間: 00: 00: 00.00

現(xiàn)在如果我們把子表mid_b_tab中deptno列加上not null約束。

 

  1. SQL> alter table mid_b_tab modify deptno not null;  
  2. alter table mid_b_tab modify deptno not null  
  3. *  

 

第 1 行出現(xiàn)錯誤:

ORA-02296: 無法啟用 (SCOTT.) - 找到空值

已用時間: 00: 00: 00.01

上面又出現(xiàn)異常,這是因?yàn)楝F(xiàn)在mid_b_tab表中有了一條記錄,就是我們先前添加的

那條記錄。

3,2,null

現(xiàn)在我們要把該表的deptno列進(jìn)行not null約束限制,所以O(shè)racle不讓我們這樣干。

那我們就只有把該表給delete或truncate掉,然后在修改deptno列為非空。

 

  1. SQL> delete from mid_b_tab; 

已刪除2行。

已用時間: 00: 00: 00.01

再次修改子表mid_b_tab表的deptno列為非空。

 

  1. SQL> alter table mid_b_tab modify deptno not null; 

表已更改。

已用時間: 00: 00: 00.01

修改成功!

我們再次插入數(shù)據(jù)

 

  1. insert into mid_b_tab(a,b,deptno) values('13','2',null); 

試試。

 

  1. SQL> insert into mid_b_tab(a,b,deptno) values('13','2',null);  
  2. insert into mid_b_tab(a,b,deptno) values('13','2',null)  
  3. *  

 

第 1 行出現(xiàn)錯誤:

ORA-01400: 無法將 NULL 插入 ("SCOTT"."MID_B_TAB"."DEPTNO")

已用時間: 00: 00: 00.00

看見現(xiàn)在Oracle不讓我們插入空值了。

所以我們在創(chuàng)建子表的Oracle外鍵約束時,該表的引用列必須要進(jìn)行not null限制,也可以在

該列創(chuàng)建unique,或primary key約束,并且引用列與被引用列的數(shù)據(jù)類型必須相同。

 

  1. SQL> insert into mid_b_tab(a,b,deptno) values('13','2','10'); 

已創(chuàng)建 1 行。

已用時間: 00: 00: 00.01

此時數(shù)據(jù)插入成功,因?yàn)榇藭r插入的10,在主表中的被引用列中已經(jīng)存在了。

現(xiàn)在我們一系列的操作:

 

  1. SQL> select * from mid_b_tab ;  
  2. A B DE  
  3.     
  4. 13 2 10  

 

已用時間: 00: 00: 00.00

 

  1. SQL> select * from mid_a_tab;  
  2. A B DE  
  3.     
  4. 1 1 10  

 

已用時間: 00: 00: 00.00

 

  1. SQL> delete from mid_a_tab; 

已刪除 1 行。

已用時間: 00: 00: 00.01

【編輯推薦】

  1. Oracle delete數(shù)據(jù)后的釋放表空間問題的解決
  2. Oracle查看和修改其最大的游標(biāo)數(shù)
  3. Oracle使用相關(guān)觸發(fā)器來實(shí)現(xiàn)自增ID
  4. Oracle使用游標(biāo)觸發(fā)器的實(shí)際存儲過程
  5. Oracle數(shù)據(jù)庫索引的優(yōu)點(diǎn)與缺點(diǎn)簡介
責(zé)任編輯:佚名 來源: 互聯(lián)網(wǎng)
相關(guān)推薦

2010-04-06 16:00:19

Oracle更改表

2010-03-29 15:33:18

Oracle EXP

2010-03-31 17:40:15

Oracle SELE

2010-04-23 15:44:29

Oracle 外鍵

2010-03-30 16:33:55

Oracle數(shù)據(jù)類型

2010-09-02 10:02:06

SQL刪除

2010-06-17 17:50:31

SQL Server外

2010-03-30 14:32:38

Oracle Date

2010-04-08 18:33:46

Oracle VARR

2010-06-18 08:30:48

SQL Server

2010-06-02 17:31:10

MySQL定時任務(wù)

2011-04-14 13:10:23

Oracle

2023-09-08 08:44:09

Oracle數(shù)據(jù)庫

2010-04-12 14:44:06

Oracle Impd

2010-05-04 15:15:39

Oracle分頁查詢

2010-04-29 09:16:16

Oracle密碼過期處

2010-04-09 09:28:30

Oracle自增字段

2010-04-21 13:31:11

Oracle時間

2010-04-30 17:33:27

Oracle數(shù)據(jù)集成

2010-04-09 13:35:35

Oracle啟動
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號