一、資料庫完整性概述
資料庫的完整性包括資料庫的正確性與資料庫的相容性。
完整性檢查和控制的防範物件主要是不合語義、不正確的資料,防止它們進入資料庫。完全性控制的防範物件是非法使用者和非法操作。防止它們對資料庫中的資料進行非法的獲取。
二、如何實現資料庫的完整性
2.1為實現資料庫的完整性,資料庫管理系統(dbms)必須實現以下功能:
①提供定義完整性約束條件的機制。
②提供完整性的檢查方法。
③進行違約處理。
2.2實現方式
①sql標準使用了一系列的概念來描述完整性,包括關係模型的實體完整性,參照完整性和使用者定義的完整性。這些完整性由sql的資料定義語言語句實現,它們作為資料庫模式的一部分存入資料字典中。
②資料庫管理系統用於檢查資料庫完整性約束條件的機制稱為資料庫完整性的檢查。一般在insert,delete,update等操作執行之後,或是在事務提交時檢查。檢查操作執行後資料庫中的資料是否違反了完整性約束條件。
③資料庫在發現資料違反了資料的完整性機制之後就進行相應的違約處理,比如不執行該動作,取消級聯。
注:資料庫的完整性機制是關係型資料庫系統的核心功能,可以為使用者和應用提供一致的資料庫完整性。資料庫的完整性無法通過程式來實現,因為使用應用程式實現資料庫的完整性存在漏洞,可能會被其它的應用程式破壞。
三、實體完整性
3.1、關係模型中的實體完整性通常是使用primary key來定義,對但屬性定義的碼通常有兩種說明方法,一種是定義為列級約束條件,另一種是定義為表級約束條件。對
多個屬性構成的碼只有一種說明方法,即
定義為表級的約束條件。
定義為列級的約束條件
create
table student
( sno char(9) primary
key,
sname char(20) not
null,
s*** char(2),
sage smallint,
sdept char(20)
);
定義為表級的約束條件
create
table student
( sno char(9),
sname char(20) not
null,
s*** char(2),
sage smallint,
sdept char(20),
primary
key(sno)
);
: 3.2、實體完整性的檢查和違約處理
每當使用者程式對基本表插入一條記錄或對主碼進行更新操作時,實體完整性規則將自動檢查。包括
(1)檢查主碼是否唯一,如果不唯一則拒絕插入或修改。
(2)檢查主碼各屬性是否為空,如果有乙個為空則拒絕插入或修改。
檢查主碼是否唯一的一種方法是進行全表掃瞄,依次判斷每一條記錄的主碼值和插入的主碼值是否相同。由於全表掃瞄十分耗時,關係型資料庫系統一般都在主碼上建立乙個索引。
四、參照完整性
4.1、關係型資料庫的參照完整性是在create table中使用foreign key短語定義那些為外碼,用reference指明這些外碼參照那些表的主碼。
例如:
create
table sc
( sno char(9) not
null,
cno char(9) not
null,
grade small int,
primary
key(sno,cno),
foreign
key(sno) references student(sno),
foreign
key(cno) references course(cno)
);
: 4.2、參照完整性的檢查以及違約處理
①拒絕執行。該策略一般為預設策略。
②級聯操作。
③設定為空值。
create
table sc
( sno char(9) not
null,
cno char(9) not
null,
grade small int,
primary
key(sno,cno),
foreign
key(sno) references student(sno)
ondelete
cascade
/*當刪除student表中的元組時,級聯刪除sc表中的相應元組*/
onupdate
cascade,
/*當更新student表中的元組時,級聯更新sc表中的相應元組*/
foreign
key(cno) references course(cno)
ondelete
noaction
/*當刪除course表中的元組時造成與sc表不一致,拒絕刪除*/
onupdate
cascade
/*當更新course表中的cno時,級聯更新sc表中的相應元組*/
);
五、使用者定義的完整性
5.1屬性上的約束條件
在create table中定義屬性的同時,可以根據應用要求定義屬性上的約束條件,即屬性值限制,包括:
(1)列值非空(not null)。
(2)列值唯一。
(3)檢查列值是否滿足乙個條件表示式(check短語)。
以check短語為例
student表中的s***只允許取「男」或「女」。
create
table student
( sno char(9) primary
key,
sname char(8) not
null,
s*** char(2) check(s*** in('男','女')),
sage smallint,
sdept char(20)
);
當像表中插入元組或修改屬性的值時,關係資料庫系統會檢查屬性上的約束條件是否被滿足,如果不滿足則操作將拒絕執行。
六、完整性約束命名子句
6.1、完整性約束命名子句
命名方式:
constraint 《完整性約束條件名》
《完整性約束條件》
《完整性約束條件》包括not null、unioue、primary key、foreign key、check等短語。
6.2 修改完整性規則限制
可以使用alter table語句修改表中的完整性限制。
/*去掉完整性限制*/
drop
constraint c1;
/*新增完整性限制*/
add constraint c2 check(sno between 9000 and 9999);
資料庫完整性
完整性約束條件 實體完整性給出了主鍵的取值的最低約束條件 規則是 主鍵的各個屬性都不能為空。參照完整性給出了在關係之間建立正確的聯絡的約束條件 規則是 外來鍵或者取空值 此時要求外來鍵的各個屬性均為空值 或者等於被參照關係中的主鍵的某個值。使用者自定義完整性 關係數控應用系統中的關係往往還應該滿足一...
資料庫完整性
資料的完整性和安全性 資料庫的完整性和安全性是兩個既有聯絡又不盡相同的概念。資料的完整性是為了防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料。資料的安全性是保護資料庫防止惡意破壞和非法訪問。完整性檢查和控制的防範物件是不合語義的 不正確的資料,防止它們進入資料庫。安全性控制的方...
資料庫 完整性
一 實驗目的 1 掌握資料庫約束的概念 2 熟悉sql server 的完整性約束技術。3 了解sql server 的違反完整性處理措施。二 實驗環境 sql server2014 三 實驗內容 1.在前幾次實驗所使用的資料庫中新建乙個教師資訊表,表名為teacher,字段包括tno 教師編號 t...