【MySQL】触发器trigger / 事件

news2024/12/23 9:52:48

文章目录

  • 1. 触发器 trigger
    • 1.1 触发器命名
    • 1.2 new和old关键字
    • 1.3 案例:insert 触发器
    • 1.4 练习:delete 触发器
    • 1.5 查看触发器 show triggers
    • 1.6 使用触发器记录对表的操作
  • 2 事件
    • 2.1 打开 / 关闭事件调度器
    • 2.2 创建事件 create event
    • 2.3 查看,删除和更改事件

1. 触发器 trigger

  • 触发器是在插入、更新和删除语句前后执行的一堆SQL代码。
  • 使用触发器的目的:增强数据一致性;更改表1后,与表1有关联的表的相关数据也会同步更新。

1.1 触发器命名

  • 表名_after/before_操作(update/delete/insert)
  • 这样可以在查看触发器时进行筛选,可以筛选出与哪个表有关的触发器。

1.2 new和old关键字

  • new关键字:返回刚刚插入的行
  • old关键字:返回更新或删除的行

1.3 案例:insert 触发器

  • 在payments表增加新数据后,触发invoices表中相关的数据同步更新
drop trigger if exists payment_after_insert;
delimiter $$
create trigger payment_after_insert
    after insert on payments -- 还可写update / delete
    for each row -- 触发器会作用于每一个受影响的行
begin
    update invoices
        set payment_total = payment_total + new.amount
    where invoice_id = new.invoice_id;
end $$
delimiter ;

insert into payments
values (default, 5, 3, '2019-01-01', 10, 1)

结果:原来id为3的total是0,触发器后自动更新为10
在这里插入图片描述

1.4 练习:delete 触发器

  • 删除在payments表中增加的数据,invoices表中的total又变回了原来的0;
drop trigger if exists payment_after_delete;
delimiter $$
create trigger payments_after_delete
    after delete on payments
    for each row
begin
    update invoices
        set payment_total = payment_total - old.amount
    where invoice_id = old.invoice_id;
end $$
delimiter ;

delete from payments
where payment_id = 9;

结果:
在这里插入图片描述

1.5 查看触发器 show triggers

-- 查看所有触发器
show triggers
-- 按条件筛选查看触发器
show triggers like 'payments%'

在这里插入图片描述

1.6 使用触发器记录对表的操作

  • 触发器的另一常见用途:记录对表的修改和操作。当增加或删除了某条数据时,可以把操作记录下来。
  • 案例:创建了一个简易的记录表进行演示
    • 创建了一个简易的记录操作的表payments_audit来记录。会记录被操作了的数据的一些信息,以及操作本身的类型、操作时间。
-- 在插入数据后,进行操作的记录
drop trigger if exists payment_after_insert;
delimiter $$
create trigger payment_after_insert
    after insert on payments
    for each row -- 触发器会作用于每一个受影响的行
begin
    update invoices
    set payment_total = payment_total + new.amount
    where invoice_id = new.invoice_id;
    
	-- 往记录操作的表里插入一条数据,类型为插入
    insert into payments_audit
        values (new.client_id, new.date, new.amount, 'Insert', now());
end $$
delimiter ;

drop trigger if exists payments_after_delete;
delimiter $$
create trigger payments_after_delete
    after delete on payments
    for each row
begin
    update invoices
    set payment_total = payment_total - old.amount
    where invoice_id = old.invoice_id;
	-- 往记录操作的表里插入一条数据,类型为删除
    insert into payments_audit
    values (old.client_id, old.date, old.amount, 'Delete', now());
end $$
delimiter ;

insert into payments
values (default, 5, 3, '2019-01-01', 10, 1);

delete from payments
where payment_id = 10;

运行结果:payments_audit表中记录了两条操作记录
在这里插入图片描述

2 事件

  • 事件是根据计划执行的任务。
    • 事件可以执行一次,也可以按照某种规律执行。如每天早上十点或每月一次。
    • 可以通过事件来自动化数据库维护任务,如删除已经过期的数据,把数据从一张表复制到存档表,或汇总数据生成报告。

2.1 打开 / 关闭事件调度器

  • show variables like ‘event%’:找到事件管理器变量。
    • show variables:查询所有的系统变量
  • set global event_scheduler = on : 打开事件调度器
  • set global event_scheduler = off:关闭事件调度器

2.2 创建事件 create event

  • on schedule 后接时间
    • at ‘2019-05-01’,执行一次
    • every ,定期执行
  • 每隔10秒执行一次,删除执行之间超过5分钟的数据。
drop event if exists yearly_delete_stale_audit_rows;
delimiter $$
create event yearly_delete_stale_audit_rows
on schedule
    every 10 second starts '2019-01-01' ends '2029-01-01'
do begin
    delete from payments_audit
        where action_date < now() - interval 5 minute;
end $$
delimiter ;

结果:创建事件前,audit表的数据:
在这里插入图片描述
创建时间后,删除了表中的数据
在这里插入图片描述

2.3 查看,删除和更改事件

  • show events like ‘yearly%’: 查看事件
    在这里插入图片描述
  • drop event if exists yearly_delete_stale_audit_rows: 删除事件
  • alter event:修改事件,和create event同样用法。可以用alter event替换create event
    • 启用或禁用事件:
    • alter event yearly_delete_stale_audit_rows disable;
    • alter event yearly_delete_stale_audit_rows enable;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1317199.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

idea__SpringBoot微服务11——整合Druid数据源(新依赖)(新注解)

整合JDBC 一、导入依赖二、配置Druid————————创作不易&#xff0c;如觉不错&#xff0c;随手点赞&#xff0c;关注&#xff0c;收藏(*&#xffe3;︶&#xffe3;)&#xff0c;谢谢~~ 接着 第10的 新注解&#xff1a; ConfigurationProperties ConfigurationPropert…

流量分析基础

定义&#xff1a; 流量分析&#xff08;Traffic Analysis&#xff09;是指对网络流量数据进行分析和解释&#xff0c;以获得有关网络中通信的信息和情报。这种技术可以用于网络安全、网络管理和网络优化等领域。 网络流量包含了许多有关网络通信的细节信息&#xff0c;如源IP地…

【教3妹学编程-算法题】使用最小花费爬楼梯

插&#xff1a; 前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。 坚持不懈&#xff0c;越努力越幸运&#xff0c;大家一起学习鸭~~~ 3妹&#xff1a;2哥2哥&#xff0c;你有没有看到新闻&…

2023/12/17 初始化

普通变量&#xff08;int,float,double变量&#xff09;初始化&#xff1a; int a0; float b(0); double c0; 数组初始化&#xff1a; int arr[10]{0}; 指针初始化&#xff1a; 空指针 int *pnullptr; 被一个同类型的变量的地址初始化&#xff08;赋值&#xff09; int…

必要时进行保护性拷贝

保护性拷贝&#xff08;Defensive Copy&#xff09;是一种常见的编程实践&#xff0c;用于在传递参数或返回值时&#xff0c;创建副本以防止原始对象被意外修改。以下是一个例子&#xff0c;展示了何时进行保护性拷贝&#xff1a; mport java.util.ArrayList; import java.uti…

昇腾Profiling性能分析工具使用问题案例

昇腾Profiling性能分析工具用于采集和分析运行在昇腾硬件上的AI任务各个运行阶段的关键性能指标, 用户可根据输出的性能数据&#xff0c;快速定位软、硬件性能瓶颈&#xff0c;提升AI任务性能分析的效率。具体使用方法请参考&#xff1a; 本期分享几个关于Profiling性能分析工具…

Linux开发工具--vim

Linux开发工具--vim 一、vim的基本概念二、常见命令三、简单配置vim配置文件的位置常用配置选项&#xff0c;用来测试使用插件 一、vim的基本概念 vim编辑器&#xff0c;只负责写代码&#xff0c;vim是一款多模式的编辑器 vim的三种模式(其实有好多模式&#xff0c;目前掌握这…

patchless amsi学习(上)

传统的通过patch内存AmsiScanBuffer,这个网上有很多文章&#xff0c;而且相对也比较简单&#xff0c;这里就不再解释了&#xff0c;但是patch这个动作势必会有一定的敏感性&#xff0c;比如你需要修改关键位置内存属性。本文要讲的是无需patch的方式绕过amsi。 前置知识-硬件断…

wordpress:6.3的docker部署和k8s部署方式

wordpress:6.3的docker部署 一.docker部署mysql5.7数据库 docker pull mysql:5.7 mkdir -p /data/mysql/data /data/mysql/logs /data/mysql/conf touch /data/mysql/conf/my.cnf docker run --restartalways -p 13306:3306 --name mysql -v /data/mysql/conf:/etc/mysql/con…

极兔速递物流查询,用表格导出单号的每一条物流信息

批量查询极兔速递单号的物流信息&#xff0c;并以表格的形式导出单号的每一条物流信息。 所需工具&#xff1a; 一个【快递批量查询高手】软件 极兔速递单号若干 操作步骤&#xff1a; 步骤1&#xff1a;运行【快递批量查询高手】软件&#xff0c;第一次使用的朋友记得先注册…

探索太空深渊:计算机技术在航天领域的无限可能

探索太空深渊&#xff1a;计算机技术在航天领域的无限可能 一、引言 在21世纪的科技浪潮中&#xff0c;太空探索和计算机技术无疑是两个最为璀璨夺目的领域。它们各自的发展都足以改变人类社会的未来&#xff0c;而当这两者交汇时&#xff0c;所激发出的创新和变革更是超乎我…

Java stream 进阶版

1、Stream 概述 Java 8 引入了 Stream API,它是一种用于简化集合和数组操作的强大工具。Stream API 允许我们将集合或数组视为流,并在流上进行各种操作,如筛选、排序、聚合等。 Stream API 的核心概念是 Stream 流,它代表了一个数据流,其中包含了一系列的元素。这些元素…

使用JSON-Server快速搭建RESTful API接口

​​​​​​​ 概要 随着前端技术的快速发展&#xff0c;前后端分离已经成为了一种趋势。在前后端分离的架构中&#xff0c;前端需要与后端进行数据的交互&#xff0c;这就需要后端提供RESTful API接口。而在开发过程中&#xff0c;我们常常需要模拟后端数据接口&#xf…

大数据CloudSim应用实践

CloudSimExampleA.java 1准备 1.1操作系统 本实验在Windows 7 或Windows 10系统运行均可。 1.2软件 cloudsim-3.0.3.zip&#xff1b; commons-math3-3.2-bin.zip&#xff1b; jdk-8u152-windows-x64.exe&#xff1b; eclipse-jee-neon-3-win32-x86_64 所需资料链接&#xff1…

Python开发工具PyCharm v2023.3全新发布——全面推出AI Assistant工具

JetBrains PyCharm是一种Python IDE&#xff0c;其带有一整套可以帮助用户在使用Python语言开发时提高其效率的工具。此外&#xff0c;该IDE提供了一些高级功能&#xff0c;以用于Django框架下的专业Web开发。 PyCharm v2023.3正式版下载 在 PyCharm 2023.3 中&#xff0c;每…

C语言实现Hoare版快速排序(递归版)

Hoare版 快速排序是由Hoare发明的&#xff0c;所以我们先来讲创始人的想法。我们直接切入主题&#xff0c;Hoare版快速排序的思想是将一个值设定为key&#xff0c;这个值不一定是第一个&#xff0c;如果你选其它的值作为你的key&#xff0c;那么你的思路也就要转换一下&#xf…

数据手册Datasheet解读-肖特基二极管笔记

数据手册Datasheet解读笔记1-肖特基二极管 数据手册大体结构共包含10个部分肖特基二极管-SS14第一重点关注点&#xff1a;极限值第二重点关注点&#xff1a;电气特性 数据手册大体结构共包含10个部分 1.Features一特性 2.Application一应用 3.Description一说明4.Pin Configur…

c语言链表的基本操作

在C语言中&#xff0c;链表是一种常见的数据结构&#xff0c;它由一系列节点组成&#xff0c;每个节点包含一个数据元素和一个指向下一个节点的指针。链表的基本操作包括创建、插入、删除和遍历等。 下面是一个简单的链表节点结构体定义&#xff1a; struct Node { int da…

【DataSophon】大数据管理平台DataSophon-1.2.1安装部署详细流程

&#x1f984; 个人主页——&#x1f390;开着拖拉机回家_Linux,大数据运维-CSDN博客 &#x1f390;✨&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341;&#x1fa81;&#x1f341; &#x1fa81;&#x1f341;&#x1fa81;&am…

扁平化菜单功能制作

网页效果&#xff1a; HTML部分&#xff1a; <body><ul class"nav"><li><a href"javascript:void(0);">菜单项目一</a><ul><li>子菜单项01</li><li>子菜单项02</li><li>子菜单项03<…