数据库-安全性约束触发器(条件限制,修改表结构,级联删除,级联更新)

1. 创建成绩表,学号、课程号是外键,分数默认为0,限制在0-100之间

Create table 成绩表
(
学号 char(9) NOT NULL,
课程ID integer NOT NULL,
分数 smallint NULL  default 0,
)
Insert into 成绩表 (学号,课程ID,分数) values ('151011001',2,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011001',1,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011001',3,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011003',2,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011008',2,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011008',7,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011008',1,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011028',2,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011028',1,0)
Insert into 成绩表 (学号,课程ID,分数) values ('151011066',2,0)

alter table 成绩表
add constraint ck_成绩
check (分数>=0 and 分数<=100)

数据库-安全性约束触发器(条件限制,修改表结构,级联删除,级联更新)_第1张图片
2. 修改学生表结构,使其性别字段只能输入男或女两个字

alter table 学生表
add constraint ck_性别
check (性别='男' or 性别='女')

//测试代码
update 学生表 set 性别='空' where 学号='151011001'

在这里插入图片描述
3. 删除学生表的记录时,级联删除成绩表中的相关记录

create trigger tri_score
on 学生表
for delete
as
  if(select COUNT(*)from deleted)=1
  delete 成绩表 
  where 学号=(select 学号 from deleted)
  
//测试代码
delete 学生表 where 学号='151011001'

数据库-安全性约束触发器(条件限制,修改表结构,级联删除,级联更新)_第2张图片
4. 修改学生表的学号时,级联修改成绩表中的学号

create trigger tri_ab
on 学生表
for update
as
  if update(学号)
  begin
  update 成绩表
  set 学号=i.学号
  from 成绩表 br , deleted d , inserted i
  where br.学号=d.学号
  end

//测试代码
update 学生表 
set 学号='151011004'
where 学号='151011003'

数据库-安全性约束触发器(条件限制,修改表结构,级联删除,级联更新)_第3张图片
5. 系部表中增加学生人数字段,默认值为0


update 系部表 set 学生人数=0

数据库-安全性约束触发器(条件限制,修改表结构,级联删除,级联更新)_第4张图片
6. 创建触发器tri_student ,其功能是当学生表增加一条记录时,相关系部的学生人数要加1;当学生表删除一条记录时,相关系部的学生人数要减1;当学生变更系部时,转出系部的学生人数要减1,转入系部的学生人数要加1。

Create trigger tri_student
on 学生表 
for insert ,delete
as
begin
  if(select COUNT(*) from inserted )=1
     update 系部表 set 学生人数 = 学生人数+1
	 where 系部ID = (select 系部ID from inserted)

  if(select COUNT(*) from deleted )=1
     update 系部表 set 学生人数 = 学生人数-1
	 where 系部ID = (select 系部ID from deleted)
end

//测试代码
delete 学生表 where 学号='151011023'
insert into 学生表 values('151011029','林青春','女','12312312345','2000-01-01',1,49)

数据库-安全性约束触发器(条件限制,修改表结构,级联删除,级联更新)_第5张图片

你可能感兴趣的:(数据库)