当前位置: 首页 > article >正文

⑩⑥ 【MySQL】详解 触发器TRIGGER,协助 确保数据的完整性,日志记录,数据校验等操作。

在这里插入图片描述

个人简介:Java领域新星创作者;阿里云技术博主、星级博主、专家博主;正在Java学习的路上摸爬滚打,记录学习的过程~
个人主页:.29.的博客
学习社区:进去逛一逛~

在这里插入图片描述

触发器

  • ⑩⑥ 【MySQL】触发器详解
    • 1. 什么是触发器
    • 2. 触发器的使用
      • ①使用规则
      • ②案例


⑩⑥ 【MySQL】触发器详解


1. 什么是触发器

触发器

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

触发器类型

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



2. 触发器的使用

①使用规则

使用触发器

  • 🚀创建触发器

    • -- 语法:
      -- {}内的关键字为必选项,任选其一。
      -- BEFORE/AFTER表示触发SQL语句的时机,在新增/修改/删除操作之前/之后
      CREATE TRIGGER 触发器名
      {BEFORE | AFTER} {INSERT | UPDATE | DELETE}
      ON 表名 FOR EACH ROW
      BEGIN
      	-- 触发后执行的SQL语句
      END;
      

  • 🚀查看触发器

    • SHOW TRIGGERS;
      

  • 🚀删除触发器

    • -- 若不指定schema_name,默认当前数据库
      DROP TRIGGER [schema_name.]触发器名
      



②案例

准备工作

  • 通过触发器记录 user 表的数据变更日志(user_logs) | 包含增加, 修改 , 删除

  • -- 需求: 通过触发器记录 user 表的数据变更日志(user_logs) , 包含增加, 修改 , 删除 ;
    
    -- 准备工作 : 日志表 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;
    

INSERT触发器 案例

-- 插入数据触发器
DELIMITER $$

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$$

DELIMITER ;

-- 查看触发器
SHOW TRIGGERS ;

-- 插入数据到tb_user
INSERT INTO tb_user(id, NAME, phone, email, profession, age, gender, STATUS, createtime) VALUES 
(26,'三皇子','18809091212','erhuangzi@163.com','软件工程',23,'1','1',NOW());

-- 查看触发器触发后的日志表
SELECT * FROM user_logs;

-- 删除触发器
drop trigger tb_user_insert_trigger;



UPDATE触发器 案例

-- 修改数据触发器
DELIMITER $$

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$$

DELIMITER ;

-- 查看触发器
SHOW TRIGGERS ;

-- 执行更新操作
UPDATE tb_user SET profession = '会计' WHERE id = 23;
UPDATE tb_user SET profession = '会计' WHERE id <= 5;

-- 查看触发器触发后的日志表
SELECT * FROM user_logs;

DELETE触发器 案例

-- 删除数据触发器
DELIMITER $$

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$$

DELIMITER ;

-- 查看触发器
SHOW TRIGGERS ;




在这里插入图片描述


http://www.kler.cn/a/134718.html

相关文章:

  • leetcode-位运算题型
  • Java 责任链模式 减少 if else 实战案例
  • HTTP常见的状态码有哪些,都代表什么意思
  • 【CVPR2024】2024年CVPR的3D 目标检测的综述(还在补充中)
  • 从华为到创业公司
  • JAVA:探索 EasyExcel 的技术指南
  • 微服务学习|Nacos配置管理:统一配置管理、配置热更新、配置共享、搭建Nacos集群
  • 2021年3月青少年软件编程(Python)等级考试试卷(一级)
  • ckplayer自己定义风格播放器的开发记录
  • SaleSmartly新增AI意图识别触发器!让客户享受更精准的自动化服务
  • C++sqrt函数题目
  • 聊一聊小程序单聊页面构思
  • 【广州华锐互动】VR可视化政务服务为公众提供更直观、形象的政策解读
  • hadoop、hive、DBeaver的环境搭建及使用
  • CorelDraw2024(CDR)- 矢量图制作软件介绍
  • CentOS安装nodejs
  • 奇瑞金融:汽车金融行业架构设计
  • Modbus转Profinet网关在金银精炼控制系统中应用案例
  • 一步一步教你如何在Windows 10上使用Java,包括下载、安装和配置等
  • 系列六、多线程集合不安全
  • 开发《星球大战》小游戏的意义
  • AWS云服务器EC2实例实现ByConity快速部署
  • Python大数据之linux学习总结——day09_hive调优
  • 本地jar导入maven
  • 汇编层面有三个主要的操作对象
  • idea2023帅气的jpa函数生成辅助工具