Mysql高等之触发器,触发器里after和before的界别

数据库

before是先产生触发,再增、删、改。 
接触的讲话先于监视的增、删、改发生,大家有空子决断就要发生的操作。 

Mysql高档之触发器

触发器是一类特别的事务
,能够监视某种数据操作(insert/update/delete),并触及相关操作(insert/update/delete)。

数据库 1

看以下事件:

数据库 2

 

完了下单与裁减仓库储存的逻辑

Insert into o (gid,num) values (2,3); // 插入语句

Update g set goods_num = goods_num – 3 where id = 2;// 更新进度

那三个逻辑能够作为二个完好无缺,大概说, insert —> 引来 update

用触发器能够减轻上述难题.

咱俩能够监视某表的生成,当发生某种变化时,触发某些操作.

数据库 3

创办触发器的语法

Create trigger triggerName

After/before insert/update/delete on 表名

For each row #那句话是原则性的

Begin

Sql语句; # 一句或多句,insert/update/delete范围内

End;

删去触发器的语法:

Drop trigger 触发器名

查阅触发器

Show triggers

数据库 4

哪些在触发器引用行的值

对于insert来说, 新扩大的行 用new 来代表,

行中的每一列的值 ,用new.列名来表示.

对此 delete来讲, 原来有一行,后来被去除,

想引用被剔除的这一行,用old,来表示, old.列名,就可以引用被删行中的值.

对于update来说,

被改造的行,

修改前的数据 ,用 old来代表, old.列名引用被退换以前行中的值

修改后的数目,用new 来代表, new.列名引用被涂改以往行中的值

数据库 5

数据库 6

 

触发器里after 和before的分别

After 是先实现多少的增,删,改再触及,

接触的说话晚于监视的增,删,改,不或然影响前边的增加和删除改换作.

Before是先成功触发,再增加和删除改,

接触的说话先于监视的增,删,改发生,大家有空子判定,修改将在发生的操作.

一流案例:

对于所下订单,进行剖断,假使订单的数码 > 5 ,就以为是黑心订单,

强制把所订的商品数量改成5

数据库 7

翻开哪些触发器:

数据库 8

数据库 9

触发器是一类特其余事务
,能够监视某种数据操作(insert/update/delete),并触及相关操作(insert/update/delete)。
看以下事件: 完结…

after是先产生多少的增加和删除改,再接触,触发的话语晚于监视的增加和删除改操作,无法影响前边的增加和删除更换作;相当于说先插入订单记录,再立异商品的数据;

after是先形成多少的增、删、改再触发 

//student执行delete操作
delete from student where stid = 7;

after是先完结多少的增、删、改再触发
触发的言语晚于监视的增、删、改,不能影响后面的增加和删除改变作。
befor…

效果: 监视某种意况并触及某种操作

Demo 

//实践多条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′,’江苏’);

第五、下订单,查看订单表与仓库储存表 
尽管下了10只猫的订单,订单表中也最多为5只,仓库储存表中猫的库存较少5只。 

//删除触发器(注意外键约束)drop trigger 触发器名称;

Java代码 
delimiter $ 

同样动作不能够创制三个触发器

数据库 10 

翻看触发器show triggers;

其三、先把结束符改为$ 

//delimiter 定义mysql中的分隔符
在mysql中,’;’标记着sql语句的了断,不过在触发器要执行的Sql语句中要选取到’;’,全体供给再度定义分隔符
delimiter //  敲//才执行Sql
//触发器(trigger)
概念:当实行二个动作时,引起了别的一多种的操作。

首先、创造库存表如下: 

before 和after的区别

触发器里after和before的分别

//创制学生数量表
create table st_count(
 number int(11) not null default 0
);
//创造触发器语法
create trigger 触发器名称
接触的机遇 //before,after
接触的动作 //insert,update,delete
on 引起触发器的表名称
数据库,for each row
执行的sql语句;

数据库 11 

能监视: 增,删,改  触发操作: 增,删,改

接触的言辞晚于监视的增、删、改,无法影响后面包车型地铁增加和删除改换作。 

after insert触发器 before insert触发器 after delete触发器 after
update触发器

Java代码 
create trigger t1 
before insert on o 
for each row 
begin 
 if new.much > 5 then 
 set new.much = 5; 
 end if; 
 update g set number = number – new.much where id = new.gid; 
end$ 

before是先完结触发,再增加和删除改,触发的口舌先于监视的增加和删除改,大家就有机会推断,修改将要发生的操作;

 

insert into student
(name,age,sex,tel,joinTime,local)values(‘喵喵’,22,’女’,’12345678909′,’2012-12-1′,’江苏’);
行使begin …end结构,能够定义一个实施多条sql语句的触发器

第四、创立触发器: 

翻开触发器 show triggers;

第二、成立订单表,咱未有数据。 

//实行单条sql语句的触发器
//在student表中删除一条数据以往,st_count的学生数量自动-1
create trigger tri_after_del
after delete
on student for each row
update st_count set number = number -1;

优秀案例: 
对此所下订单,进行判别,假设订单的多少 >
5,就觉着是恶意订单,强制把订购的物品数量改成 5. 

触发器:

数据库 12

触发器:trigger, 枪击,扳击,引线的意思 一发千钧,

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图