触发器

什么是触发器,可以理解为特殊的存储过程。修改表中指定数据时执行的存储过程。触发器是被动的通过事件触发,存储过程是主动地被调用。


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;

你可能感兴趣的:(触发器)