用mysql创建触发器
学习创建触发器:
触发器的定义就是,当执行增删改查等操作就会触发执行sql语句。
先创建两个表:dongwu表和购买buy表,数据字典如下:
动物表:
Create table dongwu(
Dwid int not null auto_increment,
Name varchar(30),
Num int(5) not null,
Primary key(dwid)
)
购买表:
Create table buy(
Bid int not null auto_increment,
Name varchar(30),
Buynum int(5) not null,
Primary key(bid)
)
插入几条动物的信息,
Insert into dongwu values(1,’laohu’,5);
Insert into dongwu values(1,’huli’,55);
创建触发器:
Delimite $ //更变结束符号
create trigger test1
after //这里可以触发前和触发后都可以after/before
insert //这里update/delete/insert/select
on buy //监视的表
for each row //暂时不懂
begin
update dongwu set num=num-new.buynum where name=new.name; //绑定要触发的语句,new为插入时的buy表新增的一行记录
end$
在buy表插入数据测试,是否已经触发触发器。
Insert into buy values(1,’laohu’,2);
原本为5个数量,现在已经为3个。触发成功。还有另一种触发,就是删除数据的时候,dongwu表的数据变回来。
一个表只能有一种触发器,所以要删除这个test1才能再次建立触发器。
//这个不用删,因为是delete类型,不属于同一种。
Drop trigger test1;
新建新的触发器:
create trigger test1
after //这里可以触发前和触发后都可以after/before
delete //这里update/delete/insert/select
on buy //监视的表
for each row //暂时不懂
begin
update dongwu set num=num+old.buynum where name=old.name; //绑定要触发的语句,old为删除时的buy表新增的一行记录
end$
测试触发器:
Delete from buy where bid=1$
原本为数量为3,现在已经变为5,触发器触发成功。
New和old的使用关系:
Insert—>new delete—>old update—>用旧的数据就用old,更新后的数据为new