什么是触发器,可以理解为特殊的存储过程。修改表中指定数据时执行的存储过程。触发器是被动的通过事件触发,存储过程是主动地被调用。
sql触发器触发器是保证程序完整性的一种方法,他不是通过程序启动,也不是通过手动启动,而是事件触发的。当对一个表进行,插入,修改的时候,就会激活他。触发器经常用于加强数据的完整性和业务规则。触发器的优点:1.触发器是自动的,当对表中的数据进行修改后,自己被触发。2.触发器可以对数据库中的表进行折叠修改。3.触发器可以强制限制。create trigger trigger_Name on Student
after insert
as
begin
if OBJECT_ID('student_sum','U') is null--判断student_sum是否存在
create table student_sum(stuCount int default(0));--创建一个表默认是0
declare @stuNumber int;--定义一个stuNumber int类型的参数
select @stuNumber=COUNT(*) from Student; --查出学生的总数
if not exists (select * from student_sum)--判断表中是否有记录
insert into student_sum values(0)
update student_sum set stuCount=@stuNumber;
end
insert into student(name,sex,isOk)values('吕布','男',1);
select stuCount 学生总人数 from student_sum;
insert into student(name,sex,isOk)values('貂蝉','女',0);
select stuCount 学生总人数 from student_sum;
insert into student(name,sex,isOk)values('曹阿瞒','男',1);
select stuCount 学生总人数 from student_sum;
既然定义了学生总数表是向student插入数据后,计算的学生总数,所以禁止向该表中插入数据
create trigger insert_forbidden on student_sum
after insert --插入之后
as
begin
RAISERROR('禁止直接向该表中插入记录,操作被禁止',1,1)--raiserror 是用于抛出一个错误
rollback transaction
end
--创建删除触发器
create trigger tring_delete on Student
after delete
as
begin
select id as 已删除的学生编号,sex,isOk from Student
end
delete from Student where id=12
select id as 已删除的学生编号 from Student;
网友评论