MySql之触发器

目录

触发器类型及语法

类型

语法

#案例

insert类型触发器

update类型触发器

update类型触发器


参考大佬:MySQL之触发器_mysql触发器-CSDN博客

触发器:在增删改之前或之后,触发并执行触发器中定义的SQL语句。

触发器:MySql只支持行级触发器,不支持语句级触发器。

           行级触发器:如执行一条update语句,影响了5行,触发器会被出发5次。

           语句级触发器:如执行一条update语句,不管影响了多少行,触发器都只触发1次。

触发器类型及语法

类型

  • 在UPDATE和DELETE触发器中OLD关键字用于引用更新或删除操作之前的行版本。对于UPDATE操作,你可以通过OLD.column_name来访问被更新之前的列的值;对于DELETE操作,OLD关键字允许你访问被删除行的列的值。
  • 在INSERT触发器中OLD关键字没有意义,因为INSERT操作是向表中添加新行,而不涉及任何已存在的行版本。

语法

查看触发器

show triggers


创建触发器

create trigger {触发器名称}
{before | after } {insert | update | delete}  -- 触发器类型和事件
on 表名
for each row  -- 行级触发器-触发器的作用范围
begin
    -- 编写触发器执行的逻辑
end;

删除触发器

drop trigger 触发器名称;

#案例

通过触发器记录tb_user表的数据变更日志(增删改),将变更日志插入到日志表user_logs

#日志表结构
create table user_logs(

             id int(11) ;

             操作类型 varchar(20),

             时间  datetime,

             操作id int(11),

             操作参数 varchar(500),

             primary key(`id`)

)engine=innodb default charset=utf8;

分析:因为对于增删改都需要触发,所以需要定义三个触发器

insert类型触发器

create trigger  {随便起个触发器名}

           after   insert

           on     tb_user  

           for   each row

begin

        insert into user_logs(id,操作类型,时间,操作id,操作参数) 

                             values(null,"insert",now(),new.id,concat('插入的数据内容为: 
                                  id=',new.id,',name=',new.name, 
                                 ',phone=',new.phone,',email=' ,new.email))

end;

#效果:当插入user表数据时,会触发触发器并增加到logs日志表中。

update类型触发器

create trigger  {随便起个触发器名}
           after   update
           on     tb_user  
           for    each row
begin
        update user_logs(id,操作类型,时间,操作id,操作参数) 
                             values(null,"update",now(),new.id,
   concat('更新之前为: id=',old.id,',name=',old.name,  ',phone=',old.phone,',email=' ,old.email,
   '更新之后为: id=',new.id,',name=',new.name,  ',phone=',new.phone,',email=' ,new.email))
end;

#效果:当更改user表数据时,就会记录到logs日志表中。

update类型触发器

create trigger  {随便起个触发器名}
           after   delete
           on     tb_user  
           for   each row
begin
        delete user_logs(id,操作类型,时间,操作id,操作参数) 
                             values(null,"delete",now(),new.id,
                                 concat('删除之前的数据为: id=',old.id,',name=',old.name, ',phone=',old.phone,',email=' ,old.email))
end;

#效果:当删除user表数据时,就会记录到logs日志表中。


 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值