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;
這樣,原先被禁用的外鏈就被重新啟用了,非常簡單。