189 8069 5689

数据库中触发器

触发器

专注于为中小企业提供成都网站设计、网站建设、外贸网站建设服务,电脑端+手机端+微信端的三站合一,更高效的管理,为中小企业武侯免费做网站提供优质的服务。我们立足成都,凝聚了一批互联网行业人才,有力地推动了上千多家企业的稳健成长,帮助中小企业通过网站建设实现规模扩充和转变。

 其是一种特殊的存储过程。一般的存储过程是通过存储过程名直接调用,而触发器主要是

 通过事件(增、删、改)进行触发而被执行的。其在表中数据发生变化时自动强制执行。

 常见的触发器有两种: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


本文题目:数据库中触发器
当前URL:http://cdxtjz.cn/article/piphgp.html

其他资讯