數據庫5之完整性約束的實現

在上一篇文章中,我們已經對完整性約束有了一定的概念,並且做了分類。

實驗操作放在另外一篇文章

分類: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方式

將所有的外碼值設置爲空值。


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