mysql中的触发器~

CREATE TRIGGER <触发器名称>  --触发器必须有名字,最多64个字符,可能后面会附有分隔符.它和MySQL中其他对象的命名方式基本相象.
{ BEFORE | AFTER }  --触发器有执行的时间设置:可以设置为事件发生前或后。
{ INSERT | UPDATE | DELETE }  --同样也能设定触发的事件:它们可以在执行insert、update或delete的过程中触发。
ON <表名称>  --触发器是属于某一个表的:当在这个表上执行插入、 更新或删除操作的时候就导致触发器的激活. 我们不能给同一张表的同一个事件安排两个触发器。
FOR EACH ROW  --触发器的执行间隔:FOR EACH ROW子句通知触发器 每隔一行执行一次动作,而不是对整个表执行一次。
<触发器SQL语句>  --触发器包含所要触发的SQL语句:这里的语句可以是任何合法的语句, 包括复合语句,但是这里的语句受的限制和函数的一样。

--你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足够了。这跟SQL的标准有所不同。

例子1:在删除一条数据时,把删除的数据存到另一张表中。

create trigger sss //触发器的名字

after delete on user_role 要删除数据的表

for each row

begin

if old.overtime<curdate() then

insert into t_delete(uid,rid,overtime) values(old.uid,old.rid,old.overtime);  //这里的封号不能省 old代表被删的数据

end if;  //这里的封号不能省

end; //这里的封号不能省

 

例子2:在添加一条数据时,在另外一张表也添加相同数据

create trigger sss1 //触发器的名字

after into user_role (uid,rid,overtime) values('1','2','2015-1-1');

for each row

begin

if old.overtime<curdate() then

insert into t_delete(uid,rid,overtime) values(new.uid,new.rid,new.overtime);  //这里的封号不能省 new代表刚刚添加的数据

end if;  //这里的封号不能省

end; //这里的封号不能省

顺便附上SQL Server的触发器

SQL Server 全程都可以不加符号。

create trigger stu_ins //触发器名字

on stu //表

after delete

As

declare @age int select @age=age from  deleted    删除是deleted

if(@age<=15)    

  begin   

  print '年龄符合要求'

 end

    else    

begin   

  insert into t_xinxi(id,name,age) select * from deleted   //这里要说明下 select * from deleted   这个有多少个字段就前面在插入的时候就的有几个

                               //insert into t_xinxi(name,age) select name,age from deleted   类是与这样

   print '删除成功'

 end

 

posted @ 2015-10-20 13:59  Lars  阅读(204)  评论(0编辑  收藏  举报