同一动作不能创建两个触发器
触发器:trigger, 枪击,扳击,引线的意思 一触即发,
作用: 监视某种情况并触发某种操作
触发器:
能监视: 增,删,改 触发操作: 增,删,改
查看触发器 show triggers;
after insert触发器 before insert触发器 after delete触发器 after update触发器
before 和after的区别
after是先完成数据的增删改,再触发,触发的语句晚于监视的增删改操作,无法影响前面的增删改动作;也就是说先插入订单记录,再更新商品的数量;
before是先完成触发,再增删改,触发的语句先于监视的增删改,我们就有机会判断,修改即将发生的操作;
//删除触发器(注意外键约束)drop trigger 触发器名称;
查看触发器show triggers;
//delimiter 定义mysql中的分隔符
在mysql中,';'标志着sql语句的结束,但是在触发器要执行的Sql语句中要使用到';',所有需要重新定义分隔符
delimiter // 敲//才执行Sql
//触发器(trigger)
定义:当执行一个动作时,引起了其他一系列的操作。
//创建学生数量表
create table st_count(
number int(11) not null default 0
);
//创建触发器语法
create trigger 触发器名称
触发的时机 //before,after
触发的动作 //insert,update,delete
on 引起触发器的表名称
for each row
执行的sql语句;
//执行单条sql语句的触发器
//在student表中删除一条数据之后,st_count的学生数量自动-1
create trigger tri_after_del
after delete
on student for each row
update st_count set number = number -1;
//student执行delete操作
delete from student where stid = 7;
//执行多条sql语句的触发器
//在student表中存入一条数据之后,
(1)st_count的学生数量自动+1
(2)score自动存入学生一条成绩
create trigger tri_after_insert2
after insert
on student for each row
begin
update st_count set number = number+1;
insert into score values(8,1,100);
end
////调用:student执行Insert操作
insert into student values(9,'喵喵',22,'女','12345678909','2012-12-1','江苏');
insert into student (name,age,sex,tel,joinTime,local)values('喵喵',22,'女','12345678909','2012-12-1','江苏');
使用begin ...end结构,可以定义一个执行多条sql语句的触发器
网友评论