Sql Server 主鍵 外來鍵約束

2022-08-27 04:18:08 字數 1764 閱讀 5887

主鍵約束

表通常具有包含唯一標識表中每一行的值的一列或一組列。 這樣的一列或多列稱為表的主鍵 (pk),用於強制表的實體完整性。 由於主鍵約束可保證資料的唯一性,因此經常對標識列定義這種約束。

如果為表指定了主鍵約束, 資料庫引擎 將通過為主鍵列自動建立唯一索引來強制資料的唯一性。 當在查詢中使用主鍵時,此索引還允許對資料進行快速訪問。 如果對多列定義了主鍵約束,則一列中的值可能會重複,但來自主鍵約束定義中所有列的值的任何組合必須唯一。

如下圖所示,purchasing.productvendor表中的productidvendorid列構成了針對此表的復合主鍵約束。 這確保了productvendor表中的每個行都具有productidvendorid的乙個唯一組合。 這樣可以防止插入重複的行。

外來鍵約束

外來鍵 (fk) 是用於在兩個表中的資料之間建立和加強鏈結的一列或多列的組合,可控制可在外鍵表中儲存的資料。 在外鍵引用中,當包含乙個表的主鍵值的乙個或多個列被另乙個表中的乙個或多個列引用時,就在這兩個表之間建立了鏈結。 這個列就成為第二個表的外來鍵。

例如,因為銷售訂單和銷售人員之間存在一種邏輯關係,所以sales.salesorderheader表含有乙個指向sales.salesperson表的外來鍵鏈結。salesorderheader表中的salespersonid列與salesperson表中的主鍵列相對應。salesorderheader表中的salespersonid列是指向salesperson表的外來鍵。 通過建立此外鍵關係,如果salesperson表中不存在外來鍵關係,則salespersonid的值將無法插入到salesorderheader表。

表最多可以將 253 個其他表和列作為外來鍵引用(傳出引用)。 sql server 2016 將可在單獨的表中引用的其他表和列(傳入引用)的數量限制從 253 提高至 10,000。 (相容性級別至少必須為 130。)數量限制的提高帶來了下列約束:

與主鍵約束不同,建立外來鍵約束不會自動建立對應的索引。 但是由於以下原因,對外鍵手動建立索引通常是有用的:

儘管外來鍵約束的主要目的是控制可以儲存在外鍵表中的資料,但它還可以控制對主鍵表中資料的更改。 例如,如果在sales.salesperson表中刪除乙個銷售人員行,而這個銷售人員的 id 由sales.salesorderheader表中的銷售訂單使用,則這兩個表之間關聯的完整性將被破壞;salesorderheader表中刪除的銷售人員的銷售訂單因為與salesperson表中的資料沒有鏈結而變得孤立了。

外 鍵約束防止這種情況發生。 如果主鍵表中資料的更改使之與外來鍵表中資料的鏈結失效,則這種更改將無法實現,從而確保了引用完整性。 如果試圖刪除主鍵表中的行或更改主鍵值,而該主鍵值與另乙個表的外來鍵約束中的值相對應,則該操作將失敗。 若要成功更改或刪除外來鍵約束中的行,必須先在外鍵表中刪除或更改外來鍵資料,這會將外來鍵鏈結到不同的主鍵資料。

SQL Server外來鍵約束

sql server中主外來鍵的定義 1.create table dept dept no int primary key,dept name nvarchar 50 not null insert into dept values 10,it 20,finance 30,engneer crea...

mysql約束,主鍵,外來鍵

資料庫表約束 對錶中的資料進行限制,保證資料的正確性 有效性和完整性,乙個表如果新增了約束,不正確的資料將無法插入到表中。約束在建立表的時候新增比較合適。約束名約束關鍵字 主鍵primary key 唯一unique 非空not null 外來鍵foreign key 檢查約束 check 注 my...

新增主鍵約束跟外來鍵約束

表 一 student 學生表 新增主鍵約束學號sno 表 二 course 課程表 新增主鍵約束課程號con,新增外來鍵約束教工編號ton 表 三 score 成績表 新增兩個外來鍵約束學號sno和課程號cno,主鍵約束是sno cno。表 四 teacher 教師表 新增主鍵約束教工編號tno ...