一种特殊的储存结构
通过事件触发,自动调用
分类:DDL触发器 create,alter,drop
DML触发器 insert,update,delete
DML触发器:after触发器,insert,update,delete操作后触发
instead of触发器:insert,update,delete操作后触发但不执行操作
inserted插入表;deleted删除表
insert 插入后的数据 无
update 更新后的数据 更新前的数据
delect 无 删除后的数据
触发器是一个特殊的事务,可以设置一些条件,可以回滚
--创建触发器 create trigger trigger_test on test for update as declare @id int,@name varchar(50),@age int--定义 select @id=id,@name=Tname,@age=age from deleted print '修改前:'+convert(varchar,@id)+','+@name+','+convert(varchar,@age); select @id=id,@name=Tname,@age=age from inserted print '修改后:'+convert(varchar,@id)+','+@name+','+convert(varchar,@age); --没有备份表则创建备份表 --select * into testInfo --from deleted --把deleted表里的数据(只有刚刚执行的数据)插入备份表 --insert into testInfo(Tname,age,datetime)select Tname,age,datetime from deleted delete from test where id=11 --先进行更改操作,触发触发器,触发器进行,把更改前的数据存入deleted,更改后的数据存入inserted --deleted,inserted,这两个表都是虚拟表,只读,当触发器结束后就这两个表就注销了,最后执行原本的更改操作。 update test set Tname='jhi',age=2 where id=9
alter trigger delete_test on test for delete as declare @id int,@name varchar(50),@age int select @id=id,@name=Tname,@age=age from deleted print('删除:')+convert(varchar,@id)+','+@name+','+convert(varchar,@age) if(object_id('testBackup','U')is not null)--‘U’对象类型是表 insert into testBackup select Tname,age,datetime from deleted--标识列不能显式插入标识列,所以这里不能插入id else select id,Tname,age,datetime into testBackup from deleted print'备份成功!' delete from test where id=23
本文来自博客园,作者:阿霖找BUG,转载请注明原文链接:https://www.cnblogs.com/lin-07/articles/17334054.html