在上一篇文章中,我們已經對完整性約束有了一定的概念,並且做了分類。
實驗操作放在另外一篇文章
分類:1.實體完整性約束2.域完整性約束3.
那麼怎麼實現完整性約束呢?
1.完整性規則的定義:通過SQL,也可以SSMS交互式創建
2.(運行時)進行完整性規則的檢查
一、實體完整性約束
1.主碼(primary key)約束
-->可以定義爲表級約束條件,也可以定義爲列級約束條件
區別:
2.唯一(unique)約束
對於指定的一個屬性或者屬性集合,不允許出現重複的值。
注意區別primary key約束
-->一個數據表只能創建一個primary key約束(可以有多個列,但是primary key只能出現一次),但一個表中可以根據需要對不同的列創建若干個unique約束(unique約束和primary key約束一樣也能在表級約束定義)
-->primary key的字段取值不能爲null,因爲它是區分該表中此記錄和其它記錄的一個鍵值。而unique字段的值可以取null
-->建立主鍵的目的是爲了讓外鍵使用,所以不允許存在空值
-->一般創建primary key約束的時候,系統會自動產生一個索引,默認類型爲簇索引。創建unique約束時,系統會創建一個unique索引,索引的類型默認爲非簇索引。但是也可以指定創建。
****************************************************************************************************************************
索引:根據索引可以找到對應的物理地址,從而更容易找到需要的數據的地址。例如查字典,找到偏旁,再找要查的字。
簇索引:順序結構和物理結構一致的一種索引,查字典,通過拼音查找該字,而拼音是按照ABCDEF排序的,對應的字也是按照ABCDEF排序。
非簇索引:順序結構和物理結構不一致的一種索引。通過部首查字法來查找該字,沒有一定的順序。
****************************************************************************************************************************
注意,如果表中已經有數據,建立主鍵/唯一約束可能會出錯。
二、域完整性約束
1.非空(not null)約束
-->聲明某個屬性不能取空值
2.缺省(default)約束
-->如果列中沒有輸入值就會填充默認值。
非空約束只在列級約束條件中定義,不能在表級約束條件中定義。
-->修改表創建默認約束,建立好一張表之後,通過修改該表來創建一個默認約束
表的創建:
修改表添加默認約束:
3.檢查(check)約束
一個字段的輸入必須滿足check約束的條件,否則不能正常輸入。例如:sex只能取男或女,不能取其他的值,此時可以定義一個check約束來約束當前列的取值。注意:timestamp和identity兩種類型的字段不能定義check約束。
兩種定義方法:
具體的實驗操作和步驟以及注意事項會另外寫一篇文章
三、參照完整性約束
1.外鍵(foreign key)約束
-->cascade級聯刪除和級聯更新(以下表爲例,班級表是主表,學生表是從表)
級聯刪除就是刪除主鍵表數據的同時,外鍵表的數據也同時刪除。
級聯更新就是更新主鍵表數據的同時,外鍵表的數據也同時更新。
-->no action方式
不允許刪除,將不會對錶產生影響。
-->set null方式
將所有的外碼值設置爲空值。