mysql的触发器

删除触发器
drop TRIGGER  触发器名字;

查找库里面的所有触发器
SELECT * FROM information_schema.`TRIGGERS`;
show triggers
触发器语法

触发器(trigger):监视某种情况,并触发某种操作。

触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete) 3.触发时间(after/before) 4.触发事件(insert/update/delete)

语法:

create trigger triggerName

after/before insert/update/delete on 表名

for each row   #这句话在mysql是固定的一般都是做行级触发所以这么写 但不是必须的  for each row 就代表每行都相应XXX事件(insert update delete) 理解成每当往表插入(更新 删除)一行的时候就触发

begin

sql语句;

end;
添加用户时的触发器
CREATE  TRIGGER add_trigger_us
AFTER INSERT on us_users
FOR EACH ROW
BEGIN

INSERT into us_person(`name`,age)VALUES(new.`name`,new.age); 

end

// insert into us_user(`name`,age)values('wang',10000);
注意:新插入的行用new来表示,行中的每一列的值用new.列名来表示。
修改用户时的触发器

CREATE TRIGGER update_trigger_us
AFTER UPDATE on us_person
for EACH ROW
BEGIN

UPDATE us_users set age=new.age where `name`=new.`name`;

END

//UPDATE us_person set age=9999 where `name`='wang';
注意:

对于update而言:被修改的行,修改前的数据,用old来表示,old.列名引用被修改之前行中的值;


修改的后的数据,用new来表示,new.列名引用被修改之后行中的值。


删除时的触发器


CREATE  TRIGGER delete_trigger_us
AFTER DELETE on us_users
FOR EACH ROW

BEGIN

DELETE from  us_person where `name`=old.`name`;

end

//DELETE  from us_users where id=129007;

注意  delete中不存在new ,对于delete而言:原本有一行,后来被删除,想引用被删除的这一行,用old来表示,old.列名可以引用被删除的行的值。
先讲一下after和before的区别:

after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量;

before是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作;

例如:操作数据前判断,数据的值,进行修改

CREATE TRIGGER befor_update
BEFORE INSERT on us_users
for each ROW
BEGIN


IF new.age>1000 THEN
set new.age=2;
end if;
end




主要来源:http://www.cnblogs.com/zzwlovegfj/archive/2012/07/05/2578574.html
posted @ 2015-06-23 17:43  逍遥帝君  阅读(249)  评论(0编辑  收藏  举报