Oracle 外鍵


Oracle 外鍵

外鍵用於與另一張表的關聯。是能確定另一張表記錄的字段,用於保持數據的一致性。

Oracle 外鍵創建

在Oracle數據庫中,外鍵是強制實施參照完整性的一種方式,使用外鍵就意味着一個表中的值在另一個表中也必須出現。
 
被引用的表稱為父表,而帶有外鍵的表稱為子表。子表中的外鍵通常會引用父表中的主鍵。

1、使用CREATE TABLE語句創建

使用CREATE TABLE語句創建外鍵的語法是:
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)
);
示例:
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)
);
 
在這個例子中,我們在supplier表上創建了一個名為supplier_pk的主鍵。 它只包含一個字段 - supplier_id字段。 然后,在products表上創建了一個名為fk_supplier的外鍵,該表根據supplier_id字段引用supplier表。
 
也可以創建一個具有多個字段的外鍵,如下例所示:
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)
);
在這個例子中,外鍵稱為fk_foreign_comp基於兩個字段 - supplier_id和supplier_name字段引用供應商表。
 

2、使用ALTER TABLE語句創建

在ALTER TABLE語句中創建外鍵的語法是:
 
ALTER TABLE table_name
ADD CONSTRAINT constraint_name
   FOREIGN KEY (column1, column2, ... column_n)
   REFERENCES parent_table (column1, column2, ... column_n);
示例:
 
ALTER TABLE products
ADD CONSTRAINT fk_supplier
  FOREIGN KEY (supplier_id)
  REFERENCES supplier(supplier_id);
在這個例子中,我們創建了一個名為fk_supplier的外鍵,它根據supplier_id字段引用supplier表的supplier_id字段。
 
我們也可以創建一個具有多個字段的外鍵,如下例所示:
 
ALTER TABLE products
ADD CONSTRAINT fk_supplier
  FOREIGN KEY (supplier_id, supplier_name)
  REFERENCES supplier(supplier_id, supplier_name);
 

Oracle 級聯刪除外鍵

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

使用CREATE TABLE語句定義級聯刪除

以下是使用CREATE TABLE語句定義級聯刪除的語法:
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表創建了一個名為supplier_pk的主鍵,這個主鍵只包含supplier_id字段。
然后在products表上創建了一個名為fk_supplier的外鍵,該表根據supplier_id字段引用supplier表的supplier_pk字段。
由於級聯刪除,當supplier表中的記錄被刪除時,products表中相應的所有記錄也將被刪除,因為這些記錄具有相同的supplier_id值。
此外,我們也可以創建一個具有多個字段的外鍵(帶級聯刪除),如下例所示:
 
 
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表。
根據supplier_id和supplier_name刪除supplier表中的記錄時,外鍵fk_foreign_comp上的級聯刪除會導致products表中的所有對應記錄也會被級聯刪除。
 
 

使用ALTER TABLE語句定義級聯刪除

除了CREATE TABLE語句外,我們還可以用ALTER TABLE語句定義級聯刪除,具體語法如下:
 
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;
 
在本例中,我們創建了一個名為fk_supplier的外鍵(帶級聯刪除),該外鍵基於supplier_id字段引用supplier表。
此外,我們也可以創建一個具有多個字段的外鍵(帶級聯刪除),如下例所示:
 
ALTER TABLE products
ADD CONSTRAINT fk_supplier
  FOREIGN KEY (supplier_id, supplier_name)
  REFERENCES supplier(supplier_id, supplier_name)
  ON DELETE CASCADE;

Oracle 怎么刪除外鍵

在Oracle中,如何去刪除自己創建的外鍵呢?本教程就為大家介紹Oracle中刪除外鍵的方法。
在Oracle中,我們可以使用ALTER TABLE語句來對外鍵進行刪除。
語法
ALTER TABLE table_name
DROP CONSTRAINT constraint_name;
示例
我們先使用下方的代碼創建一個外鍵:
 
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)
);
通過以上代碼,我們在supplier表上創建了一個名為supplier_pk的主鍵。然后再在products表上創建了一個名為fk_supplier的外鍵。
如果我們想要刪除這個新創建的外鍵,我們可以執行以下的代碼:
 
ALTER TABLE products
DROP CONSTRAINT fk_supplier;
 
這樣,我們就成功的刪除了這個新建的fk_supplier外鍵。

Oracle 怎么禁用外鍵

我們創建外鍵后,可能有時會遇到要禁用外鍵的情況,那么在Oracle中,我們如何對外鍵進行禁用呢?
語法
在Oracle中,我們要禁用外鍵可以使用以下語法:
ALTER TABLE table_name
DISABLE CONSTRAINT constraint_name;
 
示例:
我們先通過以下代碼創建一個名為fk_supplier的外鍵:
 
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)
 
在這個例子中,在supplier表上創建了一個名為supplier_pk的主鍵。 它只包含一個字段 - supplier_id字段。 然后,我們在products表上創建了一個名為fk_supplier的外鍵,products表的supplier_id字段引用supplier表的supplier_id字段。
 
如果想禁用這個外鍵,可以執行以下命令:
 
ALTER TABLE products
DISABLE CONSTRAINT fk_supplier;
 

Oracle 啟用外鍵

在Oracle中,面對已經被禁用的外鍵,我們該如何將它重新啟用呢?本教程就為大家帶來Oracle外鍵啟用方法。
外鍵啟用語法
ALTER TABLE table_name
ENABLE CONSTRAINT constraint_name;
示例:
 
我們可以先創建一個名為fk_supplier的外鍵,
然后對這個外鍵進行禁用,
現在,我們將重新啟用這個被禁用的fk_supplier外鍵,可以執行以下命令:
 
ALTER TABLE products
ENABLE CONSTRAINT fk_supplier;
這樣,原先被禁用的外鏈就被重新啟用了,非常簡單。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM