在Oracle數(shù)據(jù)庫(kù)中添加外鍵約束的方法詳解
外鍵指定一個(gè)列(或一組列)的值必須符合另一個(gè)表的一些行的值。我們說這是維持關(guān)聯(lián)表的參照完整性。
在圖形化界面中,在 外鍵 選項(xiàng)卡,只需簡(jiǎn)單地點(diǎn)擊外鍵欄位來(lái)編輯。使用外鍵的工具欄,能讓你創(chuàng)建新的、編輯或刪除選擇的外鍵欄位。
添加外鍵:添加一個(gè)外鍵到表。
刪除外鍵:刪除已選擇的外鍵。
使用 名 編輯框來(lái)輸入新鍵的名。
使用 參考模式、參考表 和 參考限制 下拉列表來(lái)分別選擇一個(gè)外部索引數(shù)據(jù)庫(kù)、表及限制。
要包含欄位到鍵,只需簡(jiǎn)單地雙擊 欄位 欄位或點(diǎn)擊 來(lái)打開編輯器進(jìn)行編輯。
刪除時(shí) 下拉列表定義采取行動(dòng)的類型。
No Action:這是默認(rèn)的動(dòng)作。參考鍵值將不會(huì)更新或刪除。
CASCADE:分別地刪除任何參考已刪除行的行或更新參考列值為被參考列的新值。
SET NULL:設(shè)置參考列為 null。
啟用
你可以通過勾選或取消勾選框來(lái)選擇是否啟用或禁用外鍵限制。
下面來(lái)正式看使用SQL語(yǔ)句創(chuàng)建的方法:
1、默認(rèn)的創(chuàng)建方式
在刪除被參照的數(shù)據(jù)時(shí),將無(wú)法刪除。
CREATE TABLE T_INVOICE (ID NUMBER(10) NOT NULL, INVOICE_NO VARCHAR2(30) NOT NULL, CONSTRAINT PK_INVOICE_ID PRIMARY KEY(ID)); CREATE TABLE T_INVOICE_DETAIL (ID NUMBER(10) NOT NULL, AMOUNT NUMBER(10,3), PIECE NUMBER(10), INVOICE_ID NUMBER(10), CONSTRAINT PK_DETAIL_ID PRIMARY KEY(ID)); ALTER TABLE T_INVOICE_DETAIL ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID);
2、級(jí)聯(lián)刪除
外鍵語(yǔ)法有個(gè)選項(xiàng)可以指定級(jí)聯(lián)刪除特征。這個(gè)特征僅作用于父表的刪除語(yǔ)句。使用這個(gè)選項(xiàng),父表的一個(gè)刪除操作將會(huì)自動(dòng)刪除所有相關(guān)的子表記錄
ALTER TABLE T_INVOICE_DETAIL ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID) ON DELETE CASCADE;
如果不能級(jí)聯(lián)刪除,可設(shè)置子表外鍵字段值為null,使用on delete set null語(yǔ)句(外鍵字段不能設(shè)置not null約束).
ALTER TABLE T_INVOICE_DETAIL ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID) ON DELETE SET NULL;
三、參照字段語(yǔ)法結(jié)構(gòu)
創(chuàng)建外鍵約束是,外鍵字段參照父表的主鍵或Unique約束字段。這種情況下可以不指定外鍵參照字段名,如下:
ALTER TABLE T_INVOICE_DETAIL ADD CONSTRAINT FK_INVOICE_ID FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE;
當(dāng)沒有指定參照字段時(shí),默認(rèn)參照字段是父表的主鍵。
如果外鍵字段參照的是Unique而非Primary Key字段,必須在add constraint語(yǔ)句中指定字段名。
相關(guān)文章
oracle創(chuàng)建數(shù)據(jù)庫(kù)和用戶的方法
這篇文章主要介紹了oracle創(chuàng)建數(shù)據(jù)庫(kù)和用戶的方法,mysql和sqlserver創(chuàng)建數(shù)據(jù)庫(kù)可以直接通過create database “數(shù)據(jù)庫(kù)名”,而oracle創(chuàng)建數(shù)據(jù)庫(kù)要對(duì)應(yīng)一個(gè)用戶,數(shù)據(jù)庫(kù)和用戶一般是一一對(duì)應(yīng)的,下面把oracle創(chuàng)建數(shù)據(jù)庫(kù)和用戶的步驟分享給大家。2015-07-07
oracle數(shù)據(jù)庫(kù)在客戶端建立dblink語(yǔ)法
oracle服務(wù)器沒有建立目標(biāo)數(shù)據(jù)庫(kù)的TNS時(shí),在客戶端(有權(quán)限的情況下)建立dblink語(yǔ)法如下,有需求的朋友可以參考下哈2013-05-05
Oracle?Expdp按條件導(dǎo)出指定表數(shù)據(jù)的方法實(shí)例
這篇文章主要介紹了Oracle的expdp數(shù)據(jù)泵方式導(dǎo)出特定機(jī)構(gòu)和時(shí)間范圍的數(shù)據(jù),并通過parfile文件進(jìn)行條件限制和配置,文中通過代碼介紹的非常詳細(xì),需要的朋友可以參考下2025-01-01
自動(dòng)備份Oracle數(shù)據(jù)庫(kù)
自動(dòng)備份Oracle數(shù)據(jù)庫(kù)...2007-03-03
教你如何通過PL/SQL創(chuàng)建序列和觸發(fā)器實(shí)現(xiàn)表自增字段
本文給大家分享如何通過PL/SQL創(chuàng)建序列和觸發(fā)器實(shí)現(xiàn)表自增字段,需要注意的是,在數(shù)據(jù)庫(kù)操作中,觸發(fā)器的使用對(duì)系統(tǒng)資源耗費(fèi)相對(duì)較大,考慮到大表操作的性能問題,?我們盡可能的減少觸發(fā)器的使用,改為直接手動(dòng)調(diào)用序列函數(shù)即可2022-11-11
oracle—SQL技巧之(一)連續(xù)記錄查詢sql案例測(cè)試
有這樣一個(gè)需求:需要查詢出某個(gè)客戶某一年那些天是有連續(xù)辦理過業(yè)務(wù),本文給予sql實(shí)現(xiàn)語(yǔ)句并測(cè)試,感興趣的朋友可以了解下2013-01-01
修改ORACLE數(shù)據(jù)庫(kù)密碼有效期的方法
這篇文章主要介紹了修改ORACLE數(shù)據(jù)庫(kù)密碼有效期的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2018-09-09
使用Oracle命令進(jìn)行數(shù)據(jù)庫(kù)備份與還原
本文詳細(xì)講解了使用Oracle命令進(jìn)行數(shù)據(jù)庫(kù)備份與還原的方法,文中通過示例代碼介紹的非常詳細(xì)。對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧<BR>2021-12-12

