MySQL(15)-触发器

Posted H_Cisco

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL(15)-触发器相关的知识,希望对你有一定的参考价值。

 当表中发生增(insert)删(delete)改(update)的时候,系统自动触发的代码然后执行

 触发器的特性

 1、有begin end体,begin end;之间的语句可以写的简单或者复杂

 2、什么条件会触发:增(insert)、删(delete)、改(update)

 3、什么时候触发:在增删改前(before)或者后(after)

 4、触发频率:针对表中每一行(记录)执行

 5、触发器定义在表上,附着在表上。

 show TRIGGERS;

 删除触发器:drop trigger 触发器名

 例:创建一个触发器,当修改sc表里的成绩后time表会记录修改的时间

show triggers;

delimiter &&

 create trigger t_updatesc after update on sc for each row

 begin

insert into time values(now());

 end

 &&

 delimiter ;

 

 update sc set score=score+1 where sno=1000 and cno=1

 例子:创建一个触发器,当有一个学生退学后,他的信息和成绩也随之被清空.

show triggers;

delimiter &&

create trigger t_deletesc after delete on student for each row

 begin

delete from sc where sno=old.sno;

 end

 &&

 delimiter ;

 

 delete from student where sno=1005

 例:

show triggers;

 

delimiter &&

create trigger t_insertsc after insert on sc for each row

 begin

update number set rs=rs+1 where cno=new.cno;

 end

 &&

 delimiter ;

 

 insert into sc values(1003,5,60)

 

 

 

 

 

 

 

 

show triggers;

delimiter &&

 create trigger t_updatesc after update on sc for each row

 begin

insert into time values(now());

 end

 &&

 delimiter ;

 

show triggers;

delimiter &&

create trigger t_deletesc after delete on student for each row

 begin

delete from sc where sno=old.sno;

 end

 &&

 delimiter ;

 

 delete from student where sno=1005

3.某公司对总经理、经理等人有报销制度。公司有报销金额表和消费明细表,总经理等人消费要报销时,添加记录到消费明细表,同时在报销金额表中将对应人员的报销余额扣除,只到金额不足,显示金额不足并取消添加的明细。该如何创建触发器?

 

Bxjeb(ygid,ygxm,ygzw,bxye)  

1001  张三  总经理   10000

1002   李四  部门经理  5000

1003  王五   一般员工  2000

 

Bxmxb(bxlsid, ygid,bxje)

20001  1001  35

20002  1001  250

20003  1003  560

 

delimiter &&

create trigger t_bxje after insert on bxmxb for each row

begin

declare AfterBxye int;

update bxjeb set bxye=bxye-new.bxje where ygid=new.ygid;

select bxye into AfterBxye from bxjeb where ygid=new.ygid;

if AfterBxye<0 then

signal sqlstate 'HY000' set MESSAGE_TEXT='用户报销金额不足';

end if;

end

&&

delimiter ;

 

insert into bxmxb VALUES(20001,1001,10);

 

insert into bxmxb VALUES(20001,1001,10000);

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 创建一个触发器,当有一个学生退学后,他的信息和成绩也随之被清空.
  • 创建一个触发器,当修改sc表里的成绩后time表会记录修改的时间

以上是关于MySQL(15)-触发器的主要内容,如果未能解决你的问题,请参考以下文章

MySQL(15)-触发器

在 mysql 中创建触发器时出现错误“1064”?

触发器中的 MySQL 错误“'NEW' 中的未知列”

php-从php插入后未触发MySQL触发器

MySql 触发器删除同一张表中的子记录

mysql触发器trigger