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

⑩⑥ 【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
BEGININSERT 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
BEGININSERT 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
BEGININSERT 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.lryc.cn/news/237016.html

相关文章:

  • 数据结构与算法编程题3
  • Go基础面经大全(持续补充中)
  • uniapp heckbox-group实现多选
  • 读懂:“消费报销”模式新零售打法,适用连锁门店加盟的营销方案
  • 一个基本的http客户端
  • html-网站菜单-点击菜单展开相应的导航栏,加减号可切换
  • 2.FastRunner定时任务Celery+RabbitMQ
  • vb.net 实时监控双门双向门禁控制板源代码
  • 文具办公产品展示预约小程序的作用如何
  • 渗透测试流程是什么?7个步骤给你讲清楚!
  • 如何解决网站被攻击的问题:企业网络攻防的关键路径
  • 大健康产业的先行者「完美公司」携手企企通,推进企业采购供应链数字化进程
  • 在windows Server安装Let‘s Encrypt的SSL证书
  • GPT实战系列-P-Tuning本地化训练ChatGLM2等LLM模型,到底做了什么?(二)
  • Python3.7+PyQt5 pyuic5将.ui文件转换为.py文件、Python读取配置文件、生成日志
  • 使用 VPN ,一定要知道的几个真相!
  • 数电实验-----实现74LS153芯片扩展为8选1时间选择器以及应用(Quartus II )
  • 如何实现MATLAB与Simulink的数据交互
  • 【数据结构】归并排序
  • 数字引领,智慧赋能|袋鼠云与易知微共同亮相2023智慧港口大会
  • 星火模型(Spark)的langchain 实现
  • python运算符重载之构造函数和迭代器
  • 【数据处理】Python:实现求条件分布函数 | 求平均值方差和协方差 | 求函数函数期望值的函数 | 概率论
  • new/delete 和malloc/free的区别
  • Linux程序设计(上)
  • mysql面试题——存储引擎相关
  • 趣学python编程 (四、数据结构和算法介绍)
  • 使用Pandas进行时间重采样,充分挖掘数据价值
  • Django(九、choices参数的使用、多对多表的三种创建方式、Ajax技术)
  • 德语B级SampleAcademy