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 三个字段mysql
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.列名来表示。sql
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.列名引用被修改以后行中的值。io