資料庫完整性試驗

2021-05-09 20:20:12 字數 4023 閱讀 1379

一、定義乙個教師表teacher(tno,tname,t***,tage,tsal,tjob,tdept)

要求:1、性別只能是『男』或『女』

2、tno為主碼,名字不能為空,且不能重複。

3、年齡在18在60歲之間

4、教授工資最低為5000(觸發器完成)

5、tdept為外碼,參照dept表。當dept表刪除元組時,相對應teacher元組拒絕刪除;修改時,相對應teacher元組同時修改。

二、定義記錄表record(rno,tno,roldsal,rnewsal,ruser,rtime)

要求:1、rno從1開始,每次加1為。主碼

2、tno為外碼,參照teacher表。

第一題和第二題參考:

use sc

go /*-------------係表-----------------------------*/

create table dept

(tdept char(10) primary key);

go /*-------------教師表-----------------------------*/

create table teacher

(tno char(10) primary key,

tname char(10) not null,

t*** char(2)check(t*** in('男','女')),

tage smallint check(tage>=18 and tage<=60),

tsal numeric(7,2),

tjob varchar(10),

tdept char(10),

foreign key (tdept) references dept(tdept)on delete no action   on update cascade);  

go   

/*-----教授工資不低於5000觸發器-----------------*/ 

create trigger teacher_jiaoshou_minsal 

on  teacher 

for insert,update as 

set nocount off

/*---------定義變數----------------------*/

declare 

@tno char(10),

@newsal numeric(7,2),

@tjob char(10)

begin

/*---------獲得變數值----------------------*/

select @tno=tno,

@newsal=tsal,

@tjob=tjob 

from inserted 

/*---------判斷是否是教授,且工資小於5000----------------------*/

if (((@newsal-5000)<0) and (@tjob='教授'))

begin

/*---------修改該員工(教授tno)表----------------------*/

update teacher 

set tsal=5000

where tno=@tno

end

end

/*-------------記錄表-----------------------------*/

create table record

(rno  int  identity (1,1) primary key,

tno char(10) references teacher(tno),

roldsal numeric(7,2),

rnewsal numeric(7,2),ruser char(10), rtime datetime);

go    

三、定義觸發器

1、觸發器insert_teacher,當插入teacher一行元組時,記錄教師編號tno,等資料資訊,插入到表record中。roldsal為0。

參考:/*-----插入teacher觸發器-----------------*/ 

create trigger insert_teacher 

on  teacher 

for insert as 

set nocount off

/*---------定義變數----------------------*/

declare 

@tno char(10),

@rnewsal numeric(7,2)

begin

/*---------獲得變數值----------------------*/

select @tno=tno,

@rnewsal=tsal 

from inserted 

/*---------插入要記錄的資料到record表----------------------*/

insert into record(tno,roldsal,rnewsal,ruser,rtime) values(@tno,0,@rnewsal,current_user,current_timestamp)

end

測試資料:

insert into dept

values('資訊工程系')

insert into teacher

values ('2008001','wang','男',34,2000,'講師','資訊工程系')

select * from teacher

2、觸發器update_teacher,當修改teacher資料時,若工資發生變動,記錄變動情況到record表。

參考:/*-----更新teacher觸發器-----------------*/ 

create trigger update_teacher 

on  teacher 

for update as 

set nocount off

/*---------定義變數----------------------*/

declare 

@tno char(10),

@roldsal numeric(7,2),

@rnewsal numeric(7,2)

begin

/*---------獲得變數值----------------------*/

select @tno=tno,

@roldsal=tsal

from deleted 

select @tno=tno,

@rnewsal=tsal 

from inserted 

/*---------插入要記錄的資料到record表----------------------*/

insert into record(tno,roldsal,rnewsal,ruser,rtime) values(@tno,@roldsal,@rnewsal,current_user,current_timestamp)

end

測試:update teacher

set tsal=3000

where tno='2008001'

select * from record

3、(課下完成)觸發器delete_teacher,當刪除teacher資料時,記錄刪除情況到delete_teacher表。記錄教師所有資訊和使用者及刪除時間。

參考:4、完成以上觸發器的測試。

說明:1.能夠觸發insert_teacher觸發器的,有對teacher表進行insert操作和update操作。

2.能夠觸發delete_teacher觸發器的,有對teacher表進行delete操作和update操作。

3.能夠觸發update_teacher觸發器的,只有有對teacher表進行update操作

資料庫完整性

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

資料庫完整性

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

資料庫 完整性

一 實驗目的 1 掌握資料庫約束的概念 2 熟悉sql server 的完整性約束技術。3 了解sql server 的違反完整性處理措施。二 實驗環境 sql server2014 三 實驗內容 1.在前幾次實驗所使用的資料庫中新建乙個教師資訊表,表名為teacher,字段包括tno 教師編號 t...