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)-触发器的主要内容,如果未能解决你的问题,请参考以下文章