數據完整性

數據完整性數據庫

1.什麼是數據完整性?
存儲在數據庫中的數據可以正確的反映實際狀況,規定數據的輸入數據不能是無效值,錯誤值和亂碼等。rem

2.數據完整性的類型
(1)實體完整性:標識符或主鍵的完整性,使其值惟一
(2)域完整性:限制類型,格式和取值範圍
(3)引用完整性:保持原表和引用表數據一致性
(4)用戶自定義完整性:根據用戶的要求自定義業務規則io

3.數據完整性的實現方式
實體完整性:主鍵約束、惟一的約束
域完整性:檢查約束、默認值約束、外鍵約束
引用完整性:外鍵約束
用戶自定義完整性:以上全部約束自由組合table

4.什麼是約束?
經過建立表來限制屬性或表中數據的完整性,也能夠經過修改語句修改約束條件。class

約束又分爲行級約束和表級約束,行級約束和表級約束本質上是同樣的,只是約束範圍不一樣。基礎

非空約束、主鍵約束通常爲行級約束,
外鍵約束(聯合主鍵)是表級約束;
檢查約束(check)隨意亂碼

2、非空約束
確保當前約束的屬性不爲空置,行級約束
非空約束的關鍵字: not nulldate

3、惟一約束
指定某一列或某幾列的數據不能重複
惟一約束關鍵字:unique數據類型

能夠經過constaint給約束取名,方便根據名稱刪除約束;引用

同時設定非空和惟一默認爲主鍵

建立複合惟一約束(表級約束)
對多個列進行惟一約束,約束兩個以上的字段(屬性)不能同時一致。
constraint uni_tno_tname unqiue(t_no,t_name)
這裏教師編號與教師名稱能夠容許其中一個是相同的,但不能同時相同。


4、主鍵約束
非空約束+惟一約束,且每一個表只能有一個主鍵約束(表級),在多列聯合的主鍵約束時,聯合主鍵的值不能重複。
主鍵約束關鍵字:primaty key。
若是數據表的屬性列中存在重複或者null值,就沒法以此屬性爲主鍵

1.在建立表時設置主鍵約束
設置單列主鍵
s_no int primaty key,
設置多個屬性爲聯合主鍵
constraint pri_tno_tname primary key(t_no,t_name)

2.添加主鍵約束
alter table teacher add constraint pri_tno_tname
primaty key(t_no);

3.刪除主鍵約束
alter table teacher drop primary key;
4.自增列
在插入數據時,若是不規定屬性的值,其值就會根據上一個屬性的值自動加1。
自增列關鍵字:auto_increment
屬性給空值時,初始默認值從1開始,以後的每個在其基礎上+1。
在建立時能夠在表後設置初始默認值:auto_increment=100
去掉自增列屬性與以前的方法一致。

5、檢查約束
檢查約束就是檢查列中屬性的取值範圍。
檢查約束關鍵字:check。
如:t_age int check(age>0 and age<200)
t_sex varchar(4) check(t_sex='男' or t_sex='女')
MySQL不支持check,須要在外部進行判斷。

6、默認值約束
默認值關鍵字:default
1.建立表屬性時添加默認值約束
s_subject varchar(20) default 'C++',

2.添加默認約束
alter table student modify column

3.刪除默認值約束
與添加默認值方法一致,只是不加默認值關鍵字就能夠了。

7、外鍵約束
一個表中的屬性值參考另外一個表中的主屬性的值,也就是外鍵值參考主鍵值,因爲外鍵約束是表級約束,參考主鍵值,因此要在建立表以前先建立參考表
外鍵約束關鍵字:foreign key(屬性名)reference 表名(屬性)
外鍵約束屬性數據類型必須相同

1.建立表時創建外鍵約束
外鍵和參考表的主鍵數據類型,長度和精度要保持一致
c_no int not null
constraint for_cno foreign key(cno)

2.添加外鍵約束
因爲外鍵約束是表級約束,須要關鍵字add。
alter table strudent add constraint for_cno
froeign key(c_no) references class(class_no);

3.刪除外鍵約束
alter table student drop constraint for_cno;

4.級聯更新/刪除
是指父表中的元組更新或刪除等操做對子表的處理方法。
其中有三種處理方式,分別是:
在更新/刪除中(on update/on delete)
(1)cascade:父表中的元組更新或刪除,子表中跟着更新或刪除。在語句以後加上on update(或on delete)cascade
(2)no action:無動做,若子表中有匹配的記錄,就不容許更新或刪除父表數據。加上on update(或on delete)no action
(3)set null:設置爲空,若子表中有匹配的記錄,父表數據更新或刪除,子表中對應數據變爲null。on update set null

這些操做是對於父表的更新或者刪除而言的,使用格式:on update(cascade/no action/set null)列如:on update cascade,on delete (cascade/no action/set null)列如:on delete set null;

相關文章
相關標籤/搜索