SQL触发器

本文介绍了MySQL中的触发器,这是一种在特定表上执行指定事件时调用的数据库对象。文章通过实例展示了如何创建before和after触发器,以及如何在insert、update事件后执行相应的操作,如更新用户余额和记录变更日志。同时,还讨论了如何利用触发器进行数据的记录和跟踪。

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表

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值