1. 程式人生 > >資料庫中外來鍵屬性的設定

資料庫中外來鍵屬性的設定

外來鍵的作用:

保持資料一致性,完整性,主要目的是控制儲存在外來鍵表中的資料。 使兩張表形成關聯,外來鍵只能引用外表中的列的值!
例如:
       a b 兩個表
       a表中存有 客戶號,客戶名稱
       b表中存有 每個客戶的訂單
      有了外來鍵後,你只能在確信b 表中沒有客戶x的訂單後,才可以在a表中刪除客戶x

建立外來鍵的前提:本表的列必須與外來鍵型別相同(外來鍵必須是外表主鍵)。

指定主鍵關鍵字:foreign key(列名)

引用外來鍵關鍵字:references <外來鍵表名>(外來鍵列名)

事件觸發限制: on delete和on update , 可設引數cascade(跟隨外來鍵改動), restrict(限制外表中的外來鍵改動),set Null(設空值),set Default(設預設值),[預設]no action

對於on delete中各個屬性有如下說明,on update同理:


ON DELETE { NO ACTION | CASCADE | SET NULL | SET DEFAULT }
指定如果已建立表中的行具有引用關係,並且被引用行已從父表中刪除,則對這些行採取的操作。預設值為 NO ACTION。

NO ACTION
資料庫引擎將引發錯誤,並回滾對父表中行的刪除操作。

CASCADE
如果從父表中刪除一行,則將從引用表中刪除相應行。

SET NULL
如果父表中對應的行被刪除,則組成外來鍵的所有值都將設定為 NULL。若要執行此約束,外來鍵列必須可為空值。

SET DEFAULT
如果父表中對應的行被刪除,則組成外來鍵的所有值都將設定為預設值。若要執行此約束,所有外來鍵列都必須有預設定義。如果某個列可為空值,並且未設定顯式的預設值,則將使用NULL 作為該列的隱式預設值。


例如:

outTable表 主鍵 id 型別 int

建立含有外來鍵的表:

 create table temp(
   id int, 
          name char(20),
          foreign key(id) references outTable
          (id) on delete cascade on update cascade);  
說明:把id列 設為外來鍵 參照外表outTable的id列 當外來鍵的值刪除 本表中對應的列篩除 當外來鍵的值改變 本表中對應的列值改變。

參考: