• MySQL进阶——触发器


    目录

    1介绍

    2语法

    3案例

    3.1 insert插入数据类型

    3.2 update修改数据类型

    3.3 delete删除数据类型

     

    4视图/存储过程/触发器—小结

    1介绍

    触发器是与表有关的数据库对象,指在insert/update/delete之前(BEFORE)或之后(AFTER),触发并执行触发器中定义的SQL语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作。

    使用别名OLDNEW引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还 只支持行级触发(影响5行则触发5次),不支持语句级触发。

    2语法

    创建、查看、删除。

    3案例

    通过触发器记录 tb_user 表的数据变更日志,将变更日志插入到日志表user_logs中, 包含增加, 修改 , 删除 ;

    日志表结构准备:

    1. create table user_logs(
    2.     id int(11) not null auto_increment,
    3.     operation varchar(20) not null  comment '操作类型,insert/update/delete',
    4.     operate_time datetime not null comment '操作时间',
    5.     operate_id int(11) not null comment '操作id',
    6.     operate_params varchar(500) comment '操作参数',
    7.     primary key (`id`) #注意这里是斜引号 ``
    8. )engine=innodb default charset =utf8;

    3.1 insert插入数据类型

    (1)创建 插入数据类型 触发器

    1. create trigger tb_user_insert_trigger
    2. after insert on tb_user2 for each row
    3. begin
    4.     insert into user_logs(id, operation, operate_time, operate_id, operate_params)VALUES
    5.     (null, 'insert', now(), new.id, concat('插入的数据内容为:id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ',profession=', NEW.profession));
    6. end;

    (2)测试:插入数据到tb_user2,日志表user_logs也更新。

    1. insert into tb_user2(id, name, phone, email, profession, age, gender, status, createtime)
    2. VALUES (25,'二皇子','18809091212','erhuangzi@163.com','软件工程',23,'1','1',now());

    3.2 update修改数据类型

    #更新数据 触发器

    1. create trigger tb_user_update_trigger
    2. after update on tb_user2 for each row
    3. begin
    4.     insert into user_logs(id, operation, operate_time, operate_id, operate_params)VALUES
    5.     (null, 'insert', now(), new.id,
    6.      concat('更新前的数据内容为:id=',old.id,',name=',old.name, ', phone=', old.phone, ', email=', old.email, ',profession=', old.profession,
    7.          '|| 更新后的数据内容为:id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ',profession=', NEW.profession));
    8. end;

    测试修改:

    update tb_user2 set profession='化学工程' where id = 8;

    成功更新:

    3.3 delete删除数据类型

    删除数据,不会产生新的数据,所以删除数据显示的日志是删除的旧的数据信息:

    #删除数据 触发器

    1. create trigger tb_user_delete_trigger
    2. after delete on tb_user2 for each row
    3. begin
    4.     insert into user_logs(id, operation, operate_time, operate_id, operate_params)VALUES
    5.     (null, 'delete', now(), old.id,
    6.      concat('删除的数据内容为:id=',old.id,',name=',old.name, ', phone=', old.phone, ', email=', old.email, ',profession=', old.profession));
    7. end;
    8. show triggers ;

    delete from tb_user2 where id = 25;

    成功删除这个记录,且有删除数据的日志:

     

    4视图/存储过程/触发器—小结

    视图/存储过程/存储函数/触发器,这一类称为mysql数据库中的存储对象。

  • 相关阅读:
    【SpringCloud负载均衡】【源码+图解】【一】LoadBalancer的HelloWorld体验
    迪文屏K600+ 数据库的读写操作
    如何使用python绘制ROC曲线?
    记一次尝试用脚本模拟手柄打游戏(一)
    WebAssembly 概述
    使用 LSTM 进行多变量时间序列预测--问题汇总
    maven-assembly-plugin 打包后 grpc请求异常
    [Go版]设计模式——Template模版方法模式
    java之方法和数组
    Mybatis第三方PageHelper分页插件原理
  • 原文地址:https://blog.csdn.net/qq_47966193/article/details/139900488