資料庫 完整性

2021-08-21 07:29:36 字數 3493 閱讀 2669

一、實驗目的:

1、掌握資料庫約束的概念;

2、熟悉sql server 的完整性約束技術。

3、了解sql server 的違反完整性處理措施。

二、實驗環境:

sql server2014

三、實驗內容:

1.在前幾次實驗所使用的資料庫中新建乙個教師資訊表,表名為teacher,字段包括tno(教師編號),tname(姓名),t***(性別),ttitle(職稱),完整性包括:設定tno為主鍵,tname非空,t***的取值範圍為「男」或「女」。

create

table teacher

(tno char

(7)primary

key,

tname char

(20)

notnull,

t*** char

(2)constraint c1 check

(t*** in('

男','女'

)),ttitle char

(4),

);2. 用insert語句插入如下記錄,觀察實驗結果:

insert into teacher values('2016001','王明','男','講師')

insert into teacher values('2016001','王英','女','助教')

insert into teacher values('2016002','張方','a','講師')

有錯誤,無法插入。因為:

訊息 2627,級別 14,狀態 1,第 1 行

違反了 primary key 約束「pk__teacher__c450026d3befefcb」。不能在物件「dbo.teacher」中插入重複鍵。重複鍵值為 (2016001)。

語句已終止。

訊息 2627,級別 14,狀態 1,第 2 行

違反了 primary key 約束「pk__teacher__c450026d3befefcb」。不能在物件「dbo.teacher」中插入重複鍵。重複鍵值為 (2016001)。

語句已終止。

訊息 547,級別 16,狀態 0,第 3 行

insert 語句與 check 約束"c1"衝突。該衝突發生於資料庫"s-t",表"dbo.teacher",column 't***'。

語句已終止。

3. 對teacher表增加乙個約束,ttitle屬性的取值範圍為('助教','講師','副教授','教授'),並插入一條記錄:

insert into teacher values('2016003','劉陽','男','研究員'),觀察實驗結果。

alter

table teacher

addconstraint c2 check

(ttitle in('

助教',

'講師','

副教授','

教授'));

insert

into teacher values

('2016003','

劉陽','男'

,'研究員'

);無法插入記錄,因為研究員不在約束內。

4. 為學生表student增加乙個約束,s***的取值範圍為「男」或「女」。

alter

table student

addconstraint c3 check

(s*** in('

男','女'

));5. 為選課表sc增加乙個約束,grade的取值在0至100之間。

(提示,3,4,5是對錶的結構增加約束定義,使用命令為:alter table)

alter

table sc

addconstraint c4 check

(grade between 0 and 100);

6. 為選課表sc增加參照完整性及違約處理,定義sno為外來鍵,與student表中的sno關聯,當刪除、更新student中的元組時,級聯刪除、更新sc表中的相應元組,命令為:

alter table sc

add foreign key(sno) references student(sno)

on delete cascade

on update cascade

使用sql語句,將student表中姓名為」王敏」的元組,學號更改為「201315123」,然後檢視sc表中的元組是否也做了相應的更改。

update student

set sno=

'201315123'

where sname=

'王敏'

做了相應的更改。

7. 為選課表sc增加參照完整性及違約處理,定義cno為外來鍵,與course表中的cno關聯,當刪除、更新course中的元組時,級聯刪除、更新sc表中的相應元組,並進行驗證。

alter

table sc

addforeign

key(cno)

references course(cno)

ondelete

cascade

onupdate

cascade

8. 建立乙個觸發器,當向sc表中新增資料時,如果新增的資料與student表中的資料不匹配(沒有對應的學號),則將此資料刪除。

create

trigger sc_8 on sc for

insert

asbegin

declare @bh char

(9)select @bh= inserted.sno from inserted

ifnot

exists(

select sno fromstudent where student.sno=@bh)

delete

from sc where sno=@bh

end9. 建立乙個修改觸發器,當student表中的sno資訊修改時,自動將sc表中的相應資訊也修改。

(簡單要求:修改僅為一條記錄)

(注:8,9的操作使用create trigger命令,觸發器建立成功後,自己使用insert語句,或者update語句進行驗證,驗證完畢,可以將觸發器刪除)

create

trigger student_t onstudent for

update

asbegin

declare @bh char

(9)declare @ah char

(9)select @bh=inserted.sno from inserted

select @ah=deleted.sno from deleted

ifexists

(select sno from sc where sc.sno=@ah)

update sc set sno=@bh where sno=@ah;

end

資料庫完整性

完整性約束條件 實體完整性給出了主鍵的取值的最低約束條件 規則是 主鍵的各個屬性都不能為空。參照完整性給出了在關係之間建立正確的聯絡的約束條件 規則是 外來鍵或者取空值 此時要求外來鍵的各個屬性均為空值 或者等於被參照關係中的主鍵的某個值。使用者自定義完整性 關係數控應用系統中的關係往往還應該滿足一...

資料庫完整性

資料的完整性和安全性 資料庫的完整性和安全性是兩個既有聯絡又不盡相同的概念。資料的完整性是為了防止資料庫中存在不符合語義的資料,也就是防止資料庫中存在不正確的資料。資料的安全性是保護資料庫防止惡意破壞和非法訪問。完整性檢查和控制的防範物件是不合語義的 不正確的資料,防止它們進入資料庫。安全性控制的方...

資料庫完整性

b 更新丟失 b 當有兩個寫程序同時修改相同的資料時,往往會出現乙個寫程序做的修改覆蓋了另乙個寫程序的修改。這種情況是完整性問題最常見的型別。互斥鎖的設計就是防範這種問題的出現。b 髒讀 b 乙個事務修改的資料在提交前被另乙個事務讀取,就會發生髒讀。由於事務提交的修改有可能會被回滾,因而其他事務讀取...