數據完整性


數據完整性

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

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

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

4.什么是約束?
通過創建表來限制屬性或表中數據的完整性,也可以通過修改語句修改約束條件。

約束又分為行級約束和表級約束,行級約束和表級約束本質上是一樣的,只是約束范圍不同。

非空約束、主鍵約束一般為行級約束,
外鍵約束(聯合主鍵)是表級約束;
檢查約束(check)隨意

二、非空約束
確保當前約束的屬性不為空置,行級約束
非空約束的關鍵字: not null

三、唯一約束
指定某一列或某幾列的數據不能重復
唯一約束關鍵字:unique

可以通過constaint給約束取名,方便根據名稱刪除約束;

同時設定非空和唯一默認為主鍵

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


四、主鍵約束
非空約束+唯一約束,且每個表只能有一個主鍵約束(表級),在多列聯合的主鍵約束時,聯合主鍵的值不能重復。
主鍵約束關鍵字: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
去掉自增列屬性與之前的方法一致。

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

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

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

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

七、外鍵約束
一個表中的屬性值參考另一個表中的主屬性的值,也就是外鍵值參考主鍵值,由於外鍵約束是表級約束,參考主鍵值,所以要在創建表之前先創建參考表
外鍵約束關鍵字: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;

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM