概述
一.mysql中的触发器(trigger)
1.1 触发器的作用:监视某种情况并且可以触发某种操作 我们可以监视某张表的变化,当发生某种变化时,触发某个操作。
1.2能监视的操作:增.删.改 触发操作:增,删,改
1.3触发器的四要素:监视地点 监视事件 触发时间 触发事件
1.4创建触发器的sql 声明一下定界符(delimiter $) $代表你想用的定界符并不唯一
delimiter $
Create trigger triggerName
After/before insert/delete/update on 表名
For each row (这句话是固定死的)
Begin
sql语句:一句或者多句必须是 insert/delete/update范围内;
End(定界符)
列如你复制一下试试看看
#声明定界符
delimiter $
#创建两张表
create table goods (
gid int auto_increment,
name char(10),
num int,
primary key(gid)
)$
create table ord (
id int auto_increment,
gid int,
mach int,
primary key(id)
)$
#添加数据
insert into goods values(null,'cat',10),(null,'dog',20),(null,'pig',30)$
#创建触发器
create trigger t7
before
insert
on ord
for each row
begin
declare
rnum int;
select num into rnum from goods where gid=new.gid;
if new.mach >= rnum then
set new.mach = rnum;
end if;
update goods set num=num-new.mach where gid=new.gid;
end$
1.5
删除触发器的语法: Drop trigger 触发器名
1.6查看触发器 Show triggers
1.7如何在触发器引用行的值
对于insert而言, 新增的行 用new 来表示,行中的每一列的值 ,用new.列名来表示.
对于 delete来说, 原本有一行,后来被删除,想引用被删除的这一行,用old,来表示, old.列名,就可以引用被删行中的值.
对于update来说,被修改的行,
修改前的数据 ,用 old来表示, old.列名引用被修改之前行中的值
修改后的数据,用new 来表示, new.列名引用被修改之后行中的值
1.8触发器里after 和before的区别
After 是先完成数据的增,删,改再触发,
触发的语句晚于监视的增,删,改,无法影响前面的增删改动作.
Before是先完成触发,再增删改,
触发的语句先于监视的增,删,改发生,我们有机会判断,修改即将发生的操作.
1.9触发其中的 for each row 必须写 因为mysql中只有行级触发器没有想oracle中有语句级触发器
行级触发器 每一行受到影响,触发器都执行
最后
以上就是专注小懒虫为你收集整理的mysql中的触发器的全部内容,希望文章能够帮你解决mysql中的触发器所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复