天天看點

Sql Server 2008R2版本中有關外鍵Foreign的使用

1. 在資料庫設計的過程中往往會想讓2張表進行關聯而使用到Foreign進而加強2張表之間的限制(如圖)

Sql Server 2008R2版本中有關外鍵Foreign的使用

以前有個問題一直沒弄明白,那就是外鍵列的值的情況,正常情況下表中的列的值可以是null或者滿足該列所定義的類型的資料即可,但是外鍵是不是也一樣呢?

答案顯然不是的,那到底是個什麼情況呢?

官方幫助文檔是這樣說明的“FOREIGN KEY 限制并不僅僅可以與另一表的 PRIMARY KEY

限制相連結,它還可以定義為引用另一表的 UNIQUE 限制。FOREIGN KEY 限制可以包含空值,但是,如果任何組合 FOREIGN KEY

限制的列包含空值,則将跳過組成 FOREIGN KEY 限制的所有值的驗證。”

2.

為了驗證官方的說法,特意測試了一下,正所謂“實驗是檢驗真理的唯一标準”

首先往UserType表裡面插入一條資料--insert

UserType(Id,TypeName,CreateDateTime,ModifyDateTime)

values(NEWID(),‘系統管理者‘,GETDATE(),GETDATE())

第一次我往UserInfo(從表)中也插入一條資料如圖,但是這裡的外鍵UserTypeId我沒有給值,但是資料插入成功了。

Sql Server 2008R2版本中有關外鍵Foreign的使用

第二次插入(如圖)

Sql Server 2008R2版本中有關外鍵Foreign的使用

這裡面外鍵我給了一個“滿足類型”的值,結果插入失敗

最後一次插入(如圖)

Sql Server 2008R2版本中有關外鍵Foreign的使用

OK插入成功!

3. 最好在借用官方的一句話“FOREIGN KEY 限制可以包含空值,但是,如果任何組合 FOREIGN KEY

限制的列包含空值,則将跳過組成 FOREIGN KEY 限制的所有值的驗證”。