數據庫中的外鍵約束

1.主鍵(PRIMARY   KEY)約束  
     一個表通常可以通過一列和多列組合的數據來唯一標識表中的每一列,這些列和列組合  
 就被稱爲表上的主鍵,它可以用來強制實體完整性。  
     當一個表指定了PRIMARY   KEY約束時,SQL   SERVER通過爲主鍵列上建立唯一索引來強制  
 數據的唯一性。唯一性索引在主鍵被用於查詢時可以對數據進行快速訪問。  


 2.外鍵(FOREIGN   KEY)約束  
     外鍵也是由一列或多列構成的,它用來建立和強制兩個表間的關聯。這種關聯是通過將  
 一個表中的組成主鍵的列或組合列加入到另一個表中形成的,這個列或組合列就成了第二  
 個表中的外鍵。  
     一個FOREIGN   KEY約束並不一定要求必須與另一個表上的PRIMARY   KEY約束相關聯,它還  
 可以被定義爲對另一個列中的UNIQUE約束的一個引用。FOREIGN   KEY約束可以允許空值,但  
 是形成外鍵的列或組合列中出現空值時將跳過對FOREIGN   KEY約束的驗證。當向表中添加新  
 數據行或修改已有的數據行時,在外鍵中的定義的列或組合列必須在其他表的主鍵中存在或  
 是爲空,否則將會出錯。  
 注意:FOREIGN   KEY約束可以對同一個數據庫中的其他表上的列或組合列進行引用,也可以  
 是對自身表中其他列或組合列的引用(自引用表)  
     儘管外鍵的主要作用是用來限制可以輸入到外鍵表中的數據,但是還可以限制對主鍵表中  
 數據的修改。  
     FOREIGN   KEY約束也可以被用作索引,這是因爲:  
     1.對FOREIGN   KEY約束的修改或被在其他表中的FOREIGN   KEY約束所檢查  
     2.外鍵列或組合列也常常被用於查詢中,對於在具有FOREIGN   KEY約束的表和其他有主鍵或  
 唯一鍵的表間進行查詢時,可以在連接準則中使用外鍵列或組合列。索引允許SQL   SERVER在  
 外鍵中進行快速查找。但是對這樣的索引的創建並不是必需的。  


外鍵   (FK)   是用於建立和加強兩個表數據之間的鏈接的一列或多列。通過將保存表中主鍵值的一列或多列添加到另一個表中,可創建兩個表之間的鏈接。這個列就成爲第二個表的外鍵。  

 當創建或更改表時可通過定義   FOREIGN   KEY   約束來創建外鍵。  

 例如,數據庫   pubs   中的   titles   表與   publishers   表有鏈接,因爲在書名和出版商之間存在邏輯聯繫。titles   表中的   pub_id   列與   publishers   表中的主鍵列相對應。titles   表中的   pub_id   列是到   publishers   表的外鍵。  

 FOREIGN   KEY   約束並不僅僅只可以與另一表的   PRIMARY   KEY   約束相鏈接,它還可以定義爲引用另一表的   UNIQUE   約束。FOREIGN   KEY   約束不允許空值,但是,如果任何組合   FOREIGN   KEY   約束的列包含空值,則將跳過   FOREIGN   KEY   約束的校驗。      

 說明     FOREIGN   KEY   約束可引用同一數據庫中的表或同一表(自引用表)內的列,例如,一個包含下面三列的僱員表:employee_number、employee_name   和   manager_   employee_number。由於經理本身也是僱員,所以從   manager_employee_number   列到   employee_number   列存在外鍵關係。  

 儘管   FOREIGN   KEY   約束的主要目的是控制存儲在外鍵表中的數據,但它還可以控制對主鍵表中數據的修改。例如,如果在   publishers   表中刪除一個出版商,而這個出版商的   ID   在   titles   表中記錄書的信息時使用了,則這兩個表之間關聯的完整性將被破壞,titles   表中該出版商的書籍因爲與   publishers   表中的數據沒有鏈接而變得孤立了。FOREIGN   KEY   約束防止這種情況的發生。如果主鍵表中數據的更改使之與外鍵表中數據的鏈接失效,則這種更改是不能實現的,從而確保了引用完整性。如果試圖刪除主鍵表中的行或更改主鍵值,而該主鍵值與另一個表的   FOREIGN   KEY   約束值相關,則該操作不可實現。若要成功更改或刪除   FOREIGN   KEY   約束的行,可以先在外鍵表中刪除外鍵數據或更改外鍵數據,然後將外鍵鏈接到不同的主鍵數據上去。  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章