所謂的級(jí)聯(lián)刪除是指當(dāng)主表中的一條記錄被刪除,那么子表中所關(guān)聯(lián)的記錄也相應(yīng)的自動(dòng)刪除。本教程將教大家如何在Oracle中使用級(jí)聯(lián)刪除外鍵。
以下是使用CREATE TABLE語句定義級(jí)聯(lián)刪除的語法:
CREATE TABLE table_name
(
column1 datatype null/not null,
column2 datatype null/not null,
...
CONSTRAINT fk_column
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
ON DELETE CASCADE
);
示例:
CREATE TABLE supplier
( supplier_id numeric(10) not null,
supplier_name varchar2(50) not null,
contact_name varchar2(50),
CONSTRAINT supplier_pk PRIMARY KEY (supplier_id)
);
CREATE TABLE products
( product_id numeric(10) not null,
supplier_id numeric(10) not null,
CONSTRAINT fk_supplier
FOREIGN KEY (supplier_id)
REFERENCES supplier(supplier_id)
ON DELETE CASCADE
);
以上示例中,我們?cè)趕upplier表創(chuàng)建了一個(gè)名為supplier_pk的主鍵,這個(gè)主鍵只包含supplier_id字段。
然后在products表上創(chuàng)建了一個(gè)名為fk_supplier的外鍵,該表根據(jù)supplier_id字段引用supplier表的supplier_pk字段。
由于級(jí)聯(lián)刪除,當(dāng)supplier表中的記錄被刪除時(shí),products表中相應(yīng)的所有記錄也將被刪除,因?yàn)檫@些記錄具有相同的supplier_id值。
此外,我們也可以創(chuàng)建一個(gè)具有多個(gè)字段的外鍵(帶級(jí)聯(lián)刪除),如下例所示:
CREATE TABLE supplier
( supplier_id numeric(10) not null,
supplier_name varchar2(50) not null,
contact_name varchar2(50),
CONSTRAINT supplier_pk PRIMARY KEY (supplier_id, supplier_name)
);
CREATE TABLE products
( product_id numeric(10) not null,
supplier_id numeric(10) not null,
supplier_name varchar2(50) not null,
CONSTRAINT fk_supplier_comp
FOREIGN KEY (supplier_id, supplier_name)
REFERENCES supplier(supplier_id, supplier_name)
ON DELETE CASCADE
);
在這個(gè)例子中,fk_foreign_comp外鍵基于兩個(gè)字段:supplier_id和supplier_name字段引用supplier表。
根據(jù)supplier_id和supplier_name刪除supplier表中的記錄時(shí),外鍵fk_foreign_comp上的級(jí)聯(lián)刪除會(huì)導(dǎo)致products表中的所有對(duì)應(yīng)記錄也會(huì)被級(jí)聯(lián)刪除。
除了CREATE TABLE語句外,我們還可以用ALTER TABLE語句定義級(jí)聯(lián)刪除,具體語法如下:
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
FOREIGN KEY (column1, column2, ... column_n)
REFERENCES parent_table (column1, column2, ... column_n)
ON DELETE CASCADE;
示例:
ALTER TABLE products
ADD CONSTRAINT fk_supplier
FOREIGN KEY (supplier_id)
REFERENCES supplier(supplier_id)
ON DELETE CASCADE;
在本例中,我們創(chuàng)建了一個(gè)名為fk_supplier的外鍵(帶級(jí)聯(lián)刪除),該外鍵基于supplier_id字段引用supplier表。
此外,我們也可以創(chuàng)建一個(gè)具有多個(gè)字段的外鍵(帶級(jí)聯(lián)刪除),如下例所示:
ALTER TABLE products
ADD CONSTRAINT fk_supplier
FOREIGN KEY (supplier_id, supplier_name)
REFERENCES supplier(supplier_id, supplier_name)
ON DELETE CASCADE;
更多建議: