触发器

Posted

tags:

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

1、mysql包含对触发器的支持。触发器是一种与表操作有关的数据库对象,

当触发器所在表上出现指定事件时,将调用该对象,

即表的操作事件触发表上的触发器的执行。


2、创建一个执行语句的触发器


create trigger 触发器名 before|after 触发事件  

on 表名  

for each row 执行语句;


before和after参数指定触发器执行的时间;


触发事件包括insert、update和delete;


for each row表示任何一条记录上的操作满足触发条件都会触发触发器;


执行语句指触发器被触发后执行的程序


create table card_info

(

  card_id int primary key ,

  uname varchar(20),

  money double

);


create table trans_info

(

   id int primary key auto_increment,

   card_id int,

   trans_type varchar(20),

   trans_money double  

);


insert into card_info values(1001,张三,10000);

insert into card_info values(1002,李四,20000);

insert into card_info values(1003,王五,30000);


select * from card_info;


select * from trans_info;


insert into trans_info values(null,1001,存款,1000);


update card_info set money=money+1000 where card_id=1001;


-- after insert 触发器   在交易记录表中添加一条交易记录 则更新我们的用户的余额

-- new 存放 触发这个触发器的 那条新增的记录

create trigger trig1

after INSERT

on trans_info

for each row  

BEGIN  

 if new.trans_type=存款 then  

    update card_info set money=money+new.trans_money where card_id=new.card_id;

 elseif new.trans_type=取款 THEN

    update card_info set money=money-new.trans_money where card_id=new.card_id;

 end if;

end;


-- 触发这个触发器

insert into trans_info values(null,1002,取款,2000);


select * from card_info;


select * from trans_info;



-- after update  

create table card_log

(

 id int primary key auto_increment,

 before_uname varchar(20),

 after_uname varchar(20),

 update_date timestamp default now()

)


-- 更新了用户名后 将更新前后的用户名存入日志表中

-- new 存放的是更新后的记录

-- old 存放的是更新前的记录

create trigger trig2

after UPDATE

on card_info

for each ROW

BEGIN

  insert into card_log values(null,old.uname,new.uname,default);

end;


-- 触发

update card_info set uname=张小三 where card_id=1001



select * from card_info;


select * from card_log;


-- 将trans_info 中删除的记录存入日志表(自己创建)

-- old表


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

存款保险保什么?

计算存款利息

软件工程作业2

设置和登记现金银行存款日记账怎么操作

Python编程实现计算存款利息

为什么民营银行,农村商业银行存款,定期存款利率比五大行还高?