首页 > 数据库 >MySQL学习之触发器

MySQL学习之触发器

时间:2024-02-21 16:55:05浏览次数:28  
标签:触发器 name 学习 user MySQL operate tb id

介绍

触发器是与表有关的数据库对象,指在 insert/update/delete 之前或之后,触发并执行触发器中定义的SQL语句集合。触发器的这种特 性可以协助应用在数据库端确保数据的完整性 , 日志记录 , 数据校验等操作 。
使用别名 OLD 和 NEW 来引用触发器中发生变化的记录内容,这与其他的数据库是相似的。现在触发器还只支持行级触发,不支持语句级触发。

  • INSERT 型触发器:NEW 表示将要或者已经新增的数据
  • UPDATE 型触发器:OLD 表示修改之前的数据 , NEW 表示将要或已经修改后的数据
  • DELETE型触发器:OLD 表示将要或者已经删除的数据

插入类型触发器

语法:
创建

CREATE TRIGGER trigger_name
BEFORE/AFTER INSERT/UPDATE/DELETE
ON tbl_name FOR EACH ROW --行级触发器
BEGIN
  trigger_ stmt;
END;

查看

SHOW TRIGGERS;

删除

DROP TRIGGER [schema_name.]trigger_name;
--如果没有指定 schema_name,默认为当前数据库

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

create table user_logs(
  id int(11) not null auto_increment,
  operation varchar(20) not null comment '操作类型, insert/update/delete',
  operate_time datetime not null comment '操作时间',
  operate_id int(11) not null comment '操作的ID',
  operate_params varchar(500) comment '操作参数',
  primary key(`id`)
)engine=innodb default charset=utf8;
-- 插入数据触发器
create trigger tb_user_insert_trigger
    after insert on tb_user for each row
begin
    insert into user_logs(id, operation, operate_time, operate_id, operate_params) VALUES
      (null, 'insert', now(), new.id, concat('插入的数据内容为: id=',new.id,',name=',new.name, 
      ', phone=', NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));
end;


-- 查看
show triggers ;

-- 删除
drop trigger tb_user_insert_trigger;

-- 插入数据到tb_user
insert into tb_user(id, name, phone, email, profession, age, gender, status, createtime) 
  VALUES (26,'三皇子','18809091212','[email protected]','软件工程',23,'1','1',now());

修改类型触发器

-- 修改数据触发器
create trigger tb_user_update_trigger
    after update on tb_user for each row
begin
    insert into user_logs(id, operation, operate_time, operate_id, operate_params) VALUES
    (null, 'update', now(), new.id,
        concat('更新之前的数据: id=',old.id,',name=',old.name, ', phone=', old.phone, ', email=', old.email, ', profession=', old.profession,
            ' | 更新之后的数据: id=',new.id,',name=',new.name, ', phone=', NEW.phone, ', email=', NEW.email, ', profession=', NEW.profession));
end;

show triggers ;

update tb_user set profession = '会计' where id = 23;

update tb_user set profession = '会计' where id <= 5;

删除类型触发器

-- 删除数据触发器
create trigger tb_user_delete_trigger
    after delete on tb_user for each row
begin
    insert into user_logs(id, operation, operate_time, operate_id, operate_params) VALUES
    (null, 'delete', now(), old.id,
        concat('删除之前的数据: id=',old.id,',name=',old.name, ', phone=', old.phone, ', email=', old.email, ', profession=', old.profession));
end;

show triggers ;

delete from tb_user where id = 26;

标签:触发器,name,学习,user,MySQL,operate,tb,id
From: https://www.cnblogs.com/nullcodeworld/p/18025649

相关文章

  • Java人力资源管理系统源码(含数据库)-springboot+vue+mysql
    EHR人力资源管理系统是一种利用现代技术,如云计算、大数据等,来实现企业人力资源信息电子化、流程自动化的系统。它覆盖了人力资源管理的各个方面,从招聘、考勤、绩效到薪酬、社保公积金等,为企业提供一站式的解决方案。​1.招聘管理:-职位发布:系统支持在线发布职位信息,吸引候选人......
  • mybatisplus学习笔记01
    常用注解中@TableId注释需要特别注意,不仅要写明值value与表内的属性对应,还要写明是否自增等类型还有@TableField的常见场景需要记忆mp中大部分的配置都是继承的mybatis,所以很类似想要使用mp,基本流程为上图所示......
  • 线段树学习笔记
    目录线段树的基础知识什么是线段树线段树的基本操作线段树的建树线段树的单点修改线段树的区间查询线段树的区间修改模板动态开点一些例题TheChildandSequence解法分析CodeLegacy相关知识:线段树优化建图解法分析Code线段树的基础知识什么是线段树线段树是一种分治思想的二叉......
  • 一键脚本破解最新版 idea 步骤,开启学习java 之旅,好好好
    效果:步骤1、idea安装:直接在官网下载最新idea-2022.2.3.dwg(:官网地址,然后根据安装引导一步一步完成安装即可,完成后打开idea看到如下效果表示idea安装成功!如图发现idea需要注册!这里我们先不管,直接关闭idea准备激活!步骤2、下载最新的破解包https://pan.baidu.com/s/1iQby9......
  • Solana 开发学习之Solana 基础知识
    Solana开发学习之Solana基础知识InstalltheSolanaCLI相关链接https://docs.solanalabs.com/cli/installhttps://solanacookbook.com/zh/getting-started/installation.html#安装命令行工具https://www.solanazh.com/course/1-4https://solana.com/zh/developers/guide......
  • TS学习随笔
    1,ts是什么TypeScript是JavaScript的超集,这意味着它可以完成JavaScript所做的所有事情,而且额外附带了一些能力。TypedJavaScriptatAnyScale.它强调了TypeScript的两个最重要的特性——类型系统、适用于任何规模。 JavaScript本身是一种动态类型语言,这意味着变量可......
  • MySQL语法
    MySQL语法MySQL的连接mysql-uyour_username-p--连接数据库SHOWDATABASES;--列出所有可用的数据库USEyour_database;--选择要使用的数据库SHOWTABLES;--列出所选数据库中的所有的表EXIT/QUIT;--退出mysqlMySQL创建数据库CREATEDATABASE数据库名;......
  • Vue 学习笔记 3--live server
    liveserver插件在Vscode扩展插件中安装liveserver,启用扩展后展示如下所示: 单击GoLive,会运行启用网页,如下图所示: 注:使用http://127.0.0.1:5500/可查看网页下详细资源信息 ......
  • Python 机器学习工具 scikit-learn 的入门使用
    参考文档:https://www.scikitlearn.com.cn/通过对已有多组数据的训练,从而实现对单个数据的结果预测安装pipinstall-Uscikit-learnDemo通过使用sklearn包中的决策树DecisionTreeclassifier算法实现简单预测importsklearnfromsklearnimporttreefeature=[[178,1],......
  • SpringBoot+MybatisPlus+Mysql实现批量插入万级数据多种方式与耗时对比
    场景若依前后端分离版本地搭建开发环境并运行项目的教程:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/108465662若依前后端分离版如何集成的mybatis以及修改集成mybatisplus实现Mybatis增强:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/1362030......