一、定義乙個教師表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...