Oracle 級聯(lián)刪除外鍵

2020-09-29 16:05 更新

所謂的級聯(lián)刪除是指當主表中的一條記錄被刪除,那么子表中所關聯(lián)的記錄也相應的自動刪除。本教程將教大家如何在Oracle中使用級聯(lián)刪除外鍵。

使用CREATE TABLE語句定義級聯(lián)刪除

以下是使用CREATE TABLE語句定義級聯(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
);

以上示例中,我們在supplier表創(chuàng)建了一個名為supplier_pk的主鍵,這個主鍵只包含supplier_id字段。

然后在products表上創(chuàng)建了一個名為fk_supplier的外鍵,該表根據(jù)supplier_id字段引用supplier表的supplier_pk字段。

由于級聯(lián)刪除,當supplier表中的記錄被刪除時,products表中相應的所有記錄也將被刪除,因為這些記錄具有相同的supplier_id值。

此外,我們也可以創(chuàng)建一個具有多個字段的外鍵(帶級聯(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
);

在這個例子中,fk_foreign_comp外鍵基于兩個字段:supplier_id和supplier_name字段引用supplier表。

根據(jù)supplier_id和supplier_name刪除supplier表中的記錄時,外鍵fk_foreign_comp上的級聯(lián)刪除會導致products表中的所有對應記錄也會被級聯(lián)刪除。

使用ALTER TABLE語句定義級聯(lián)刪除

除了CREATE TABLE語句外,我們還可以用ALTER TABLE語句定義級聯(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)建了一個名為fk_supplier的外鍵(帶級聯(lián)刪除),該外鍵基于supplier_id字段引用supplier表。

此外,我們也可以創(chuàng)建一個具有多個字段的外鍵(帶級聯(lián)刪除),如下例所示:

ALTER TABLE products
ADD CONSTRAINT fk_supplier
  FOREIGN KEY (supplier_id, supplier_name)
  REFERENCES supplier(supplier_id, supplier_name)
  ON DELETE CASCADE;


以上內容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號