日期:2014-05-16 浏览次数:20594 次




create table g( id int, name varchar(10), number int );

create table o( oid int, gid int, much int );
create trigger t1 after insert on o for each row begin update g set number = number - new.much where id = new.gid; end$


#触发器的创建----监听的是delete动作 create trigger t2 after delete on o for each row begin update g set number = number + old.much where id = old.gid; end$


#触发器的创建----监听的是update动作 create trigger t3 after update on o for each row begin update g set number = number + old.much where id = old.gid; update g set number = number - new.much where id = new.gid; end$


触发器四要素:
监视地点、监视事件、触发时间、触发事件。
#修改sql语句的结束符(把结束符由;改为$)
delimiter $
#创建触发器的语法
create trigger triggerName(触发器名字,自定义)
after/before insert/update/delete on 表名
for each row  #这句是固定格式
begin
sql语句; #一句或多句,insert/update/delete范围内
end$ 
(在创建触发器前,把sql的结束符改为了$) 
查看有哪些触发器:
show triggers;
删除触发器:
drop trigger 触发器的名字;
如何在触发器中引用行的值:
一、对于insert而言,新增的行用 new来表示,行中的每一列的值用 new.列名来表示。 
二、对于delete而言,原本有一行,后来被删除,想引用被删除的这一行,用old来表示,用old.列名
    就可以引用被删除行中的值。
三、对于update而言,被修改的行,修改前的数据用old表示,old.列名引用被修改之前行中的值;修改后
    的数据用new来表示,new.列名引用被修改之后行中的值。