Sql Server 2008R2版本中有关外键Foreign的使用
1. 在數(shù)據(jù)庫(kù)設(shè)計(jì)的過程中往往會(huì)想讓2張表進(jìn)行關(guān)聯(lián)而使用到Foreign從而加強(qiáng)2張表之間的約束(如圖)
以前有個(gè)問題一直沒弄明白,那就是外鍵列的值的情況,正常情況下表中的列的值可以是null或者滿足該列所定義的類型的數(shù)據(jù)即可,但是外鍵是不是也一樣呢?
答案顯然不是的,那到底是個(gè)什么情況呢?
官方幫助文檔是這樣說明的“FOREIGN KEY 約束并不僅僅可以與另一表的 PRIMARY KEY 約束相鏈接,它還可以定義為引用另一表的 UNIQUE 約束。FOREIGN KEY 約束可以包含空值,但是,如果任何組合 FOREIGN KEY 約束的列包含空值,則將跳過組成 FOREIGN KEY 約束的所有值的驗(yàn)證?!?/strong>
2. 為了驗(yàn)證官方的說法,特意測(cè)試了一下,正所謂“實(shí)驗(yàn)是檢驗(yàn)真理的唯一標(biāo)準(zhǔn)”
首先往UserType表里面插入一條數(shù)據(jù)--insert UserType(Id,TypeName,CreateDateTime,ModifyDateTime) values(NEWID(),'系統(tǒng)管理員',GETDATE(),GETDATE())
第一次我往UserInfo(從表)中也插入一條數(shù)據(jù)如圖,但是這里的外鍵UserTypeId我沒有給值,但是數(shù)據(jù)插入成功了。
第二次插入(如圖)
這里面外鍵我給了一個(gè)“滿足類型”的值,結(jié)果插入失敗
最后一次插入(如圖)
OK插入成功!
?
3. 最好在借用官方的一句話“FOREIGN KEY 約束可以包含空值,但是,如果任何組合 FOREIGN KEY 約束的列包含空值,則將跳過組成 FOREIGN KEY 約束的所有值的驗(yàn)證”。
總結(jié)
以上是生活随笔為你收集整理的Sql Server 2008R2版本中有关外键Foreign的使用的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 设计模式解析学习(一)
- 下一篇: 管线命令 cut grep