【MySQL数据库】触发器与事件

MySQL触发器

trigger,在表的插入insert、更新update、删除delete操作发生时自动执行MySQL语句。

学过Qt的都知道信号槽,一旦发出某个信号,那么就会触发关联的信号槽函数。触发器就类似于这个操作。

创建触发器时需要给出一些信息:

        触发器名

        在操作前还是操作后触发(before/after)

        被什么操作触发(insert/update/delete)

        被哪个表的操作触发

在MySQL中,触发器采用类似存储过程的语法进行定义,包括触发条件、触发事件、以及触发后执行的SQL语句等:

create trigger myTrigger 
[after|before] [insert|update|delete]
on table_name
begin-- coding
end;

每当表table_name进行操作时,在这之前(之后)执行器会自动执行myTrigger触发器内部的coding。不同的操作也有一定的差异:

        insert:可通过new访问被插入的行,before insert可以更新new中的值(即允许更改被插入的值)。

        delete:可通过old访问被删除的行,old中的值是只读的,因为他即将被删除/已经被删除,现在只是临时保存到old中。

        update:old可以访问更新前的值,new访问更新后的值。

Tips:总结得出insert没法访问old、delete没法访问new、update全能访问。

其它操作:

-- 查看触发器
show triggers;
-- 查看指定表的触发器
show triggers like 'table_name';--查看触发器的创建语句
show create trigger trigger_name;-- 删除触发器
drop trigger [if exists] 触发器名;

练习:需求-更新部门,对应部门的员工涨100元工资

-- 第一步:创建触发器
create trigger up_sal  after update on dept
beginupdate emp set sal=sal+100 where emp.deptno=old.deptno;
end;-- 第二步:更新部门
update dept
set dname="newDept" where deptno=20;-- 第三步:查询员工信息,发现涨工资了
select * from emp;

作业:需求-给部门表添加员工数量字段,员工表添加员工时对应部门的员工数量自动加1

第一步:dept表添加一个字段:员工数量

alter table dept
add enum int default 0;

第二步:部门表的员工数量更新为正确值

update dept
set enum = (select count(*) from emp where emp.deptno=dept.deptno);

第三步:创建触发器,员工表添加员工时,对应部门员工数量加一

create trigger refresh_enum after insert on emp
beginupdate deptset enum=enum+1 where deptno=new.deptno;
end;

第四步:员工表添加员工测试一下。(自己来吧)

总结:通过使用触发器,可以在数据库层面实现一些复杂的业务逻辑,确保数据的一致性和完整性。然而,过多的触发器可能会影响数据库性能,因此在设计时需谨慎考虑。


MySQL事件

MySQL事件是一种在数据库中创建、调度和执行计划任务的机制。通过使用事件,用户可以定期执行特定的SQL语句或存储过程,从而自动化数据库管理和维护任务。

MySQL事件机制的主要组成部分包括以下内容:

1. 事件调度器:事件调度器是MySQL中用于管理和执行事件的组件。用户可以通过事件调度器创建新的事件、修改已有的事件、启用或禁用事件,并查看事件执行的状态和日志信息。

2. 事件对象:事件对象是用户定义的一个具体任务或操作,可以是一个SQL语句、存储过程或函数。用户可以在创建事件时指定要执行的具体操作,并设置事件的调度时间和频率。

3. 事件时间表:事件时间表是与事件相关的调度时间和频率的设置。用户可以在创建事件时指定事件的执行时间表,包括事件的开始时间、结束时间、执行间隔等。

通过使用MySQL事件机制,用户可以实现诸如定时备份数据库、定期清理过期数据、定时生成报表等自动化任务,从而提高数据库管理的效率和可靠性。

创建语句:

create event event_name
on schedule _schedule_
do
event_body;

 event_name:事件名称;_schedule_:执行计划;event_body:自动执行的语句。

需求:创建一个定时事件,每1小时执行一次任务,任务为:删除用户表中注册时间早于30天前的用户数据

create event event_clean_expired_data
on schedule every 1 hour
do
delete from users where register_time < now() - interval 30 day;

特别注意:在MySQL中,事件必须处于激活态才能执行。默认情况下,新建的事件不会自动启动事件调度器,需要通过命令开始事件调度器:

set global event_scheduler = on;

触发器与事件的区别

触发器和事件给我的第一感觉就很像,但他们确实是MySQL的两种不同的机制。经过查阅相关资料,总结出了以下几点:

相似之处:

        事件和触发器都是MySQL中的一种数据对象

        它们都是作为一组SQL语句,可以定时或触发执行

        它们都可以自动完成一些常规的事务操作。

不同之处:

        语法结构不同:这点看上面的创建语句就可以知道了

        触发方式不同:

                事件按照预定的时间表自动触发执行

                触发器在特定的数据表上进行增删改等操作时触发执行

        作用范围不同:

                事件是针对整个数据库的

                触发器通常只作用于单个表(或者服务器全局、schema级)

        功能上的差异:

                事件可以完成归档、日志记录、调度管理、定期的数据清理、备份、统计等任务;

                触发器没有这些高级功能,触发器通常用来进行验证、约束、自动化处理。


感谢大家!

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Jetpack Compose 选项卡控件实现

这里写目录标题 介绍主体解释 介绍 实现选项卡控件 主体 import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.…

Java 大视界 -- Java 大数据在智慧文旅旅游目的地营销与品牌传播中的应用(150)

&#x1f496;亲爱的朋友们&#xff0c;热烈欢迎来到 青云交的博客&#xff01;能与诸位在此相逢&#xff0c;我倍感荣幸。在这飞速更迭的时代&#xff0c;我们都渴望一方心灵净土&#xff0c;而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识&#xff0c;也…

使用密码连接Redis服务的两种方式

说明&#xff1a;本文介绍连接需要密码的Redis服务的两种方式 方式一 连接时&#xff0c;携带密码&#xff0c;如下&#xff1a; redis-cli -a [密码]如下&#xff1a; 有两个问题&#xff1a; 密码直接放在命令里&#xff0c;可通过 history 找到&#xff0c;不安全&#x…

搭建React简单项目

一、项目构建 目录结构&#xff1a; 安装脚手架 npm install -g create-react-app // or yarn add -g create-react-app 一、项目版本 1、react&#xff1a;"^18.3.1"&#xff1b; 2、react-router-dom&#xff1a;"^6.23.1"&#xff1b; 3、项目创…

知识库已上线

目录 知识库上线了加入知识库注册账号切换租户加入租户找到知识库点击申请等待管理员审核通过后&#xff0c;点击去后台可以开始创作了创建我们的第一个知识库点击详情进入创作页面&#xff0c;创建我们的第一篇知识 发布知识将我们的知识库变更为公开状态发布知识等待管理员审…

对象克隆以及BigInteger()方法,与BigDecima()方法的学习

BigInteger&#xff08;&#xff09;方法&#xff1a; ①获取一个随机的大整数&#xff1a; public class Test3 {public static void main(String[] args) {Random rnew Random();BigInteger bigIntegernew BigInteger(4,r);System.out.println(bigInteger);} } ②&#xf…

学习记录-vue2,3-vue实现tab栏

目录 vue实现tab栏功能描述实现效果vue实现tab栏实现步骤1. 概念理解2. Tab栏切换 完整实例代码 vue实现tab栏功能描述 选项卡切换选中状态 实现效果 vue实现tab栏实现步骤 1. 概念理解 了解vue的基础指令 代码含义v-on绑定事件&#xff0c;可以简写为:事件名“执行体”。…

【读书笔记】华为《从偶然到必然》

note 华为的成功并非偶然&#xff0c;而是通过IPD体系、投资组合管理、平台战略等系统性工具&#xff0c;将研发投资转化为可持续的商业竞争力。书中强调的“管理即内部因素”理念&#xff0c;揭示了企业规模扩张与管理能力匹配的深层规律&#xff0c;为高科技企业提供了可借鉴…

表达式树和编译原理【10道经典面试题】(中英对照)

表达式树&#xff08;Expression Tree&#xff09; 是一种用于表示数学表达式的二叉树结构。它在编译器设计、数学计算引擎、符号计算等领域有着广泛的应用&#xff08;《表达式树&#xff08;Expression Tree&#xff09;在编译器中的应用》&#xff09;。理解表达式树的构建、…

【redis】主从复制:单点问题、配置详解、特点详解

文章目录 单点问题什么是主从复制主从模式能解决的问题并发量有限可用性问题 配置建立复制通过配置文件来指定端口配置主从查看集群结构 断开复制 特点安全性只读传输延迟 单点问题 分布式系统中&#xff0c;涉及到一个非常关键的问题&#xff1a;单点问题 某个服务器程序&…

VSCode 生成HTML 基本骨架

在VSCode 新建html文件中敲一个英文感叹号 ! <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><titl…

STM32定时器-01定时器概述

内容概述 定时器是STM32中功能最强大、结构最复杂的一个外设&#xff0c;分为四部分&#xff1a; 一部分&#xff1a;定时中断功能 二部分&#xff1a;定时器输出比较&#xff0c;常见的用途&#xff1a;产生PWM波形&#xff0c;驱动电机&#xff08;如驱动舵机和直流电机&…

在 Ubuntu 中用 Docker 安装 RAGFlow

一、安装 1.前提条件 CPU > 4 核 RAM > 16 GB Disk > 50 GB Docker > 24.0.0 & Docker Compose > v2.26.1 安装docker&#xff1a;在Ubuntu中安装Docker并配置国内镜像 2.设置 vm.max_map_count #设置 vm.max_map_count 不小于 262144# 查看 sysctl vm.…

17153 班级活动

17153 班级活动 ⭐️难度&#xff1a;简单 &#x1f31f;考点&#xff1a;2023、思维、国赛 &#x1f4d6; &#x1f4da; import java.util.Arrays; import java.util.LinkedList; import java.util.Queue; import java.util.Scanner;public class Main {static int N 10…

Java IO 流:从字节到字符再到Java 装饰者模式(Decorator Pattern),解析与应用掌握数据流动的艺术

在 Java 编程中&#xff0c;IO&#xff08;输入输出&#xff09;流是处理数据输入输出的核心工具。无论是读取文件、网络通信&#xff0c;还是处理用户输入&#xff0c;IO 流都扮演着重要角色。本文将深入探讨 Java IO 流的核心概念、分类、经典代码实例及其应用场景&#xff0…

HTTPS

目录 一 HTTPS是什么 二 加密 三 加密方案 四 CA机构/证书 五 最终方案(对称密钥/非对称密钥/CA证书)和总体流程 一 HTTPS是什么 在应用层存在SSL&#xff0c;TLS(HTTP之下&#xff0c;传输层之上)加密/解密安全协议&#xff0c;如果HTTP经过这个协议&#xff0c;对端也走…

StarRocks 主键(Primary Key)深度解析

一、StarRocks 产品简介 StarRocks 是一款高性能分析型数据库&#xff0c;专为海量数据的实时分析而设计。作为新一代湖仓&#xff08;Lakehouse&#xff09;加速引擎&#xff0c;StarRocks 融合了 MPP 架构和列式存储引擎的优势&#xff0c;能够支持亿级数据秒级查询响应。 …

(学习总结30)Linux 进程优先级、进程切换和环境变量

Linux 进程优先级、进程切换和环境变量 进程优先级基本概念查看系统进程PRI 和 NI 解释进程优先级调整命令行调整进程优先级调整新进程调度优先级命令 nice调整已运行进程调度优先级命令 renice 使用 top 调整进程优先级使用系统调用调整进程优先级 进程的竞争、独立、并行、并…

《Manus学习手册》.pdf(文末附完整版下载地址)

大家好&#xff0c;我是吾鳴。 吾鳴今天要给大家分享的一份比较全面详细的Manus学习手册&#xff0c;该学习手册主要包含Manus产品概述与核心理念、Manus功能与使用场景、Manus技术架构与工作流、Manus案例库与用户实践、邀请码获取与内测信息、Manus与传统AI对比与优势、用户评…

【MySQL】从零开始:掌握MySQL数据库的核心概念(三)

人生碌碌&#xff0c;竞短论长&#xff0c;却不道枯荣有数&#xff0c;得失难量。 前言 这是我自己学习MySQL数据库的第二篇博客总结。后期我会继续把MySQL数据库学习笔记开源至博客上。 上一期笔记是关于MySQL数据库的数据类型&#xff0c;没看的同学可以过去看看&#xff1a…