mysql 触发器 编写_mysql的触发器编写(一)

mysql语句初级入门之后,需要的是对mysql更精深的一步操作。触发器是mysql里相对比较高级的一个操作。处理器最典型的应用是事物:(Innodb会支持事物功能)TP框架里常常会用到事物回滚等概念。触发器可以实现事物的功能,比如某个会员退款成功后,交易成功状态变更,同时会变更统计数据还有用户账户金额等。

触发器的基本语法:

create trigger triggerName

after/before insert/update/delete on 表名

for each row   #这句话在mysql是固定的

begin

sql语句;

end;

在非常多的业务逻辑中,需要

新设计俩个表

test1     id  num1  num2  三个字段

test2     id  num3    score  三个字段

1.最简单的触发器设计示例

每当test1表新增一个数据组的时候的时候,test2跟新一个对应的随机数据组

CREATE DEFINER=`root`@`127.0.0.1` TRIGGER `test`.`testxiong` AFTER INSERT ON `test`.`test1`

FOR EACH ROW Insert into test2(`score`,`num3`) values(ROUND(RAND() * 99),ROUND(RAND() * 99));

对于insert而言,新插入的行用new来表示,行中的每一列的值用new.列名来表示。

2.现在实现一个功能:

我们用num3 储存生成一个随机数 score备份num1的值 进行对应的id储存

对于insert而言,新插入的行用new来表示,行中的每一列的值用new.列名来表示。

Insert into test2(`id`,`score`,`num3`) values(new.id,new.num1,ROUND(RAND() * 99));

3.关联触发器删除操作,每天test1表进行数据删除操作的时候,把test2表对应的id进行删除

CREATE TRIGGER `test`.`deletexiong` AFTER DELETE ON `test`.`test1`

FOR EACH ROW delete from test2 where test2.id=old.id;

对于delete而言:原本有一行,后来被删除,想引用被删除的这一行,用old来表示,old.列名可以引用被删除的行的值。

4.数据表更新触发

实现目标:当test1表的Id=8的num2进行更新后,test2表Id=8的score会读取test1表更新数据加上自己表里原来的score

update test2  set  score=new.num1  where Id = old.Id;

对于update而言:被修改的行,修改前的数据,用old来表示,old.列名引用被修改之前行中的值;

修改的后的数据,用new来表示,new.列名引用被修改之后行中的值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值