1、默認的創建方式
在刪除被參照的數據時,將無法刪除。
- 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、級聯刪除
外鍵語法有個選項可以指定級聯刪除特征。這個特征僅作用於父表的刪除語句。使用這個選項,父表的一個刪除操作將會自動刪除所有相關的子表記錄
- ALTER TABLE T_INVOICE_DETAIL
- ADD CONSTRAINT FK_INVOICE_ID
- FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID)
- ON DELETE CASCADE;
如果不能級聯刪除,可設置子表外鍵字段值為null,使用on delete set null語句(外鍵字段不能設置not null約束).
- ALTER TABLE T_INVOICE_DETAIL
- ADD CONSTRAINT FK_INVOICE_ID
- FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE(ID)
- ON DELETE SET NULL;
三、參照字段語法結構
創建外鍵約束是,外鍵字段參照父表的主鍵或Unique約束字段。這種情況下可以不指定外鍵參照字段名,如下:
- ALTER TABLE T_INVOICE_DETAIL
- ADD CONSTRAINT FK_INVOICE_ID
- FOREIGN KEY(INVOICE_ID ) REFERENCES T_INVOICE;
當沒有指定參照字段時,默認參照字段是父表的主鍵。
如果外鍵字段參照的是Unique而非Primary Key字段,必須在add constraint語句中指定字段名。