触发器
其是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是
通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。
常见的触发器有两种:after(for)、instead of,用于insert、update、delete事件。
after(for) 表示执行代码后,执行触发器
instead of 表示执行代码前,用已经写好的触发器代替你的操作
触发器语法:
create trigger 触发器的名字 on 操作表
for|after instead of
update|insert|delete
as
SQL语句
触发器的特征:
1、触发器是在对表进行增、删、改时,自动执行的存储过程。触发器常用于强制业务规则,它是一种高级约束,通过事件进行触发而被执行。
2、触发器是一个特殊的事务单元,可以引用其他表中的列执行特殊的业务规则或数据逻辑关系。当出现错误时,可以执行rollback transaction操作将整个触发器以及触发它的T-SQL语句一并回滚(不需显示声明begin transaction)。
3、每个触发器将用到的两个临时表:
deleted 临时表:用于临时存放被删除的记录行副本(包括delete和update语句所影响的数据行);
注意:被删除的记录行,首先从原始表中删除,并保存到触发器表。然后从触发器表中删除,再保存到deleted表。
inserted临时表:用于临时存放插入的记录行副本(包括insert和update语句所影响的数据行);
deleted表和inserted表的特征:
> 这两个表的表结构与该触发器作用的表相同;
> 这两个表是逻辑表,并且由系统管理;
> 这两个表是动态驻留在内存中的(不是存储在数据库中),当触发器工作完成后,它们也被删除;
> 这两个表是只读的,即只能运用select语句查看(用户不能直接更改);
4、所创建的触发器(insert、delete、update)是在原表数据行已经修改完成后再触发。所以,触发器是在约束检查之后才执行。
--禁止用户插入数据(实际上是先插入,然后立刻将其删除!)
create trigger tr_insert on bank
for --for表示执行之后的操作
insert --即先执行了插入操作,同时在临时表中保存了插入记录
as
--执行完插入之后,在新生成的表中将刚刚插入的那条记录删除,
--而此时得到的刚刚插入的记录的id是通过临时表 inserted得到的
delete * from bank where cid=(select cid from inserted)
生成上面的触发器后,当用户再输入insert语句后就见不到效果了!
如:insert into bank values('0004',10000),是插入不进数据库的。
--删除谁就让谁的账户加上10元
create trigger tr_dalete on bank
instead of
delete
as
update bank balance=balance+10 where cid=(select cid from deleted)
生成这个触发器之后,当用户输入delete语句后,对应的那个id不但没有被删除掉,而且他的账户增加了10元
如:delete from bank where cid='0002',执行完这句话后,编号为0002的账户会增加10元
参考文章:http://www.cnblogs.com/xugang/archive/2010/02/20/1669619.html
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。