Mysql触发器

2023-11-04

本文主针对小白:如何在数据库有数据变动得时候及时得到内容。

MySQL触发器(Triggers)是一种数据库对象,它在指定的事件(例如插入、更新或删除数据)发生时自动执行一系列预定义的操作。触发器通常用于实施业务规则、数据完整性约束和自动化任务。

下面是MySQL触发器的一般语法:

CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | UPDATE | DELETE} ON table_name
FOR EACH ROW
trigger_body

其中:

  • trigger_name 是触发器的名称,你可以自定义。
  • BEFOREAFTER 关键字表示触发器在指定事件之前或之后执行。
  • INSERTUPDATEDELETE 关键字表示触发器与哪种操作相关联。
  • table_name 是触发器所在的表名。
  • FOR EACH ROW 表示触发器将为每个受影响的行执行。
  • trigger_body 是触发器的具体操作代码,可以包含一系列的SQL语句。

 要查看已创建的触发器列表,可以使用以下命令:

SHOW TRIGGERS;

删除触发器,可以使用以下语法:

DROP TRIGGER IF EXISTS trigger_name;

请注意,在MySQL中,触发器的使用可能受到特定版本和配置的限制。在创建和使用触发器之前,请确保你有足够的权限,并且了解数据库的配置和限制。

下面是一个示例,展示如何创建一个触发器,使得对表 testAINSERTUPDATEDELETE 操作能够同步到 testB 表:

-- 创建触发器,同步插入操作
CREATE TRIGGER sync_insert_testA_to_testB
AFTER INSERT ON testA
FOR EACH ROW
BEGIN
    INSERT INTO testB (column1, column2, column3)
    VALUES (NEW.column1, NEW.column2, NEW.column3);
END;

-- 创建触发器,同步更新操作
CREATE TRIGGER sync_update_testA_to_testB
AFTER UPDATE ON testA
FOR EACH ROW
BEGIN
    UPDATE testB
    SET column1 = NEW.column1, column2 = NEW.column2, column3 = NEW.column3
    WHERE id = OLD.id;
END;

-- 创建触发器,同步删除操作
CREATE TRIGGER sync_delete_testA_to_testB
AFTER DELETE ON testA
FOR EACH ROW
BEGIN
    DELETE FROM testB WHERE id = OLD.id;
END;

这个示例创建了三个触发器:

  • sync_insert_testA_to_testB 触发器在每次向 testA 表中插入新行后,将相应的数据插入到 testB 表中。
  • sync_update_testA_to_testB 触发器在每次更新 testA 表中的行后,将相应的数据更新到 testB 表中。
  • sync_delete_testA_to_testB 触发器在每次从 testA 表中删除行后,将相应的数据从 testB 表中删除。

请根据你的实际需求修改触发器的逻辑和字段映射。

NEW OLD 是固定的关键字,用于引用触发器操作中的新数据和旧数据。

  • NEW 表示触发器操作中的新数据,通常用于插入和更新操作。你可以通过 NEW.column_name 的形式来引用 NEW 中的特定列。
  • OLD 表示触发器操作中的旧数据,通常用于更新和删除操作。你可以通过 OLD.column_name 的形式来引用 OLD 中的特定列。

这些关键字用于访问触发器操作所涉及的行的数据。NEW 包含新插入或更新的行的值,而 OLD 包含旧的被更新或删除的行的值。

之前提供的示例中,NEW.column1 是指 testA 表中插入或更新操作中的 column1 列的值。

请注意,使用 NEWOLD 关键字时,你需要确保触发器与其所关联的表具有相同的列结构,否则可能会导致错误。

现阶段使用 JAVA / Springboot 还无法被动接收触发器处理的事件,代码层要获取,可引用示例,通过触发器,将表变动数据保留到临时表上,并在原有列字段基础上新增列信息提示,如 :

  • data_type:数据类型:0-默认,1-插入,2-更新,3-删除 ,
  • data_dispose:数据处理情况:0-未处理,1-已处理

然后定时读取数据(临时)表中新增且未处理的数据在代码业务中进行同步。

(一般使用场景是访问第三方数据库并需要将对方数据同步到本地库中,但触发器语句需要到对方库执行,所以权限比较重要)

上述采用新增列来记录新数据变化情况,而不考虑临时表的原有数据直接修改,主要从两个方面考虑:

1、新增的效率比修改的效率快,修改操作涉及到锁。

2、如果在临时表原有数据上变更,查询被编辑的列比较麻烦,而且删除操作还找不到数据了。

上次示例的删除操作可修改为:

-- 创建触发器,同步删除操作
CREATE TRIGGER sync_delete_testA_to_testB
AFTER DELETE ON testA
FOR EACH ROW
BEGIN
    INSERT INTO testB (id , data_type, data_dispose, column3)
    VALUES (OLD.id, 3, 0,  NEW.column3);
END;

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Mysql触发器 的相关文章

  • 正确显示mySQL一对多查询结果

    我有两张桌子 TRIPS tripID clientID and LEGS legID depart arrive tripID TRIPS 与 LEGS 具有一对多关系 因为有多个legID s per tripID 我需要以以下格式显示
  • MySQL 创建和更新时的 CURRENT_TIMESTAMP

    我想定义一个有 2 个 TIMESTAMP 字段的表 如下所示 CREATE TABLE msgs id INT PRIMARY KEY AUTO INCREMENT msg VARCHAR 256 ts create TIMESTAMP
  • 使用 Hibernate 和 Apache DBCP 的 MySQL 连接池问题

    看来我的应用程序有问题 当应用程序在启动后闲置很长时间 我不确定确切的时间 时 我会在日志中收到以下错误消息 我使用 Spring Hibernate MySQL 和 ApacheDBCP 进行连接池 ERROR org hibernate
  • MySQL获取最后10条记录中的第一条记录

    在Mysql中 我试图获取最后10条记录中最旧的记录 为了得到最后 10 个我会简单地做SELECT FROM table ORDER BY id DESC LIMIT 10 为了获得最旧的 我只需使用 ASC 顺序 我需要首先按 DESC
  • 从多个表中选择 - 一对多关系

    我有这样的表 表产品 身份证 姓名 表格图像 产品 ID 网址 订单号 表价 产品 ID 组合 货币 价格 表数量 产品 ID 组合 数量 表 Product 与其他表是一对多关系 我需要查询表并得到类似这样的结果 伪数组 ProductI
  • 不唯一的表/别名

    因此 我尝试使用多个联接来运行此查询 以获得我想要的精确行 但我不断收到此错误 不唯一的表 别名 ss prices 我正在运行的查询 select ss accounts id ss accounts bot acc id ss acco
  • 为什么 sql 字段名称中不应该包含逗号?

    人们一直告诉我列名中不应包含空格 我只是想知道 这是为什么 这是我为学校创建的一些数据库表遇到的问题 字段名称包括 Preble 和 Darke 相反 它们需要是 普雷布尔县 俄亥俄州 和 达克县 俄亥俄州 如果它们是行名称 我只需创建一个
  • MySQL:你能指定一个随机限制吗?

    有没有办法在 SQL MySQL 中随机化限制数字 我希望能够做的是在查询中获取随机数量的结果以在插入子查询中使用 而无需任何服务器端脚本 我希望能够作为假设说明运行的查询是 SELECT id FROM users ORDER BY RA
  • 使用 PHP 代码和 HTML 表单将 Excel (.csv) 导入 MySQL

    我知道还有其他类似的帖子 但每个人都建议直接在 PHPMyAdmin 中将其导入 MySQL 这工作完美 但我需要通过 HTML 表单导入 PHP 到 MySQL 我想要一个收集文件的 HTML 表单 然后将该文件传递给 PHP 脚本 我想
  • 如何在 WP_Query 中按日期排序?

    我已经尝试过这种方式但是orderby and order不适用于 WP Query 类 posts new WP Query array post type gt block code orderby gt post date order
  • 需要有关使用 PHP 在 mysql 数据库中插入逗号分隔数据的帮助

    数据库表中已有的演示数据 INSERT INTO csvtbl ID SKU Product Name Model Make Year From Year To VALUES 1 C2AZ 3B584 AR Power Steering P
  • MySQL 5左连接未知列

    我有以下查询在 mysql 4 1 中工作 但在 5 0 中不起作用 SELECT FROM email e event email ee LEFT JOIN member m on m email e email WHERE ee ema
  • MySQL 触发器和 SUM()

    我有两张桌子 学生桌和家庭桌 在学生中 我有列 st venue 和total venue 家里我有收入 Total Revenue 是学生 st 收入与家庭收入之和 其中 family id student student id stud
  • ejabberd 16.06 + mysql 5.5.50,消息历史记录不保存

    我使用ejabberd 16 06 mysql 5 5 50 消息历史记录没有保存 我的 ejabberd yml MySQL server odbc type mysql odbc server freldo odbc port 3306
  • 如何使用实体框架设置连接字符串

    我将 EF6 与 MySQL 结合使用 并有一个用于多个数据库的模型 我希望能够在我的表单中设置连接设置 如何以编程方式设置模型的连接字符串 你应该使用EntityConnectionFactory这就是您所需要的 public strin
  • SQL 大表中的随机行(使用 where 子句)

    我有一个网站 人们可以在其中对汽车进行投票 向用户展示 4 辆汽车 他 她可以投票选出他们最喜欢的汽车 桌子cars有重要的列 car id int 10 not auto increment so has gaps views int 7
  • 使用MySQL计算单个表中借方和贷方的余额

    下面的 MySQL 表包含带有关联金额的借方或贷方 操作 如何选择具有非零 余额 的所有 CLIENT ID 我尝试将表连接到自身以计算所有借方和贷方总额 但有些东西无法正常工作 CLIENT ID ACTION TYPE ACTION A
  • 如何在 join 语句中进行计数

    我有桌子post int post id varchar title text content和表comment int comment id int post id varchar content其中 post id 是外键引用表帖子 如
  • 如何在Sequelize中从主模型同一级别的包含模型返回结果?

    这是我在项目中完成的代码和结果 我想获得包含模型的结果与主模型相同的结果 下面的代码是我所做的 序列化查询 User findAll include model Position attributes POSITION NAME then
  • 从数据库 MYSQL 和 Codeigniter 获取信息

    如果你们需要其他信息 上一个问题就在这里 从数据库中获取信息 https stackoverflow com questions 13336744 fetching information from the database 另一个更新 尽

随机推荐

  • 浅谈Hybrid技术的设计与实现第第2章

    前言 接上文 浅谈Hybrid技术的设计与实现 阅读本文前 建议阅读这个先 上文说了很多关于Hybrid的概要设计 可以算得上大而全 有说明有demo有代码 对于想接触Hybrid的朋友来说应该有一定帮助 但是对于进阶的朋友可能就不太满足了
  • Linux 终端颜色,界面着色

    环境 Ubuntu Liniux终端着色分2块 1 提示符及命令行和输出颜色 2 显示目录和文件 ls命令 颜色 一 提示符及命令行颜色设置 设置PS1命令 可立即生效 e后面为颜色设置部分 32 40m 32为前景色 40为背景色 m 不
  • pandas用均值填充nan_pandas dataframe 填充 NaN(填补缺失值)的方法 fillna 函数使用说明...

    在基于 pandas 的 DataFrame 对象进行数据处理时 如样本特征的缺省值处理 可以使用 DataFrame 对象的 fillna 函数进行填充 同样可以针对指定的列进行填补空值 单列的操作是调用 Series 对象的 filln
  • Unity-赛车Demo

    using UnityEngine using System Collections public class CarDrive MonoBehaviour public WheelCollider wheelColLF public Wh
  • 软件测试---弹出窗口

    视频地址 第五课时 https pan baidu com s 1gfLVC2n alert 弹出窗口 Alert Should Be Present Get Alert Message confirm 弹出窗口 Choose Cancel
  • [masmplus]初次使用报external symbol _start 是配置问题

    初次使用masmplus 其中在 codesg segment 使用了 start 标记 并在end处标明了 end start 但是默认的masmplus 会提示 start 为 不认识的 external symbol 如下图 那怎么办
  • 计算机系统的多级层次结构

  • Flutter的路由router-页面跳转

    文章目录 概念介绍 基本路由 Basic Routing 跳转到某个页面 弹出页面 命名路由 Named Routing 第三方路由管理库 Third Party Routing Libraries Android原生的路由 Intent
  • 两条线段是否相交原理及C++实现

    step 1 快速排斥 如上图1 2所示 AB的最大X坐标 如果小于PQ的最小X坐标 则不相交 CD和UV判断同理 换成 坐标即可 step 2 利用向量叉乘判断 亦称跨立方法 2D 叉乘可把 2D 点看作 3D 的点 z 轴的值为 0 套
  • Spring 如何使用注解实现事务管理呢?

    转自 Spring 如何使用注解实现事务管理呢 下文讲述Spring使用注解使用事务管理的方法分享 实现思路 使用 Annotation 需进行以下设置 1 在 Spring 容器中注册驱动
  • 正交矩阵

    正交矩阵是实数特殊化的酉矩阵 因此总是正规矩阵 尽管我们在这里只考虑实数矩阵 这个定义可用于其元素来自任何域的矩阵 正交矩阵毕竟是从内积自然引出的 对于复数的矩阵这导致了归一要求 定义 定义 1 如果 AA E E为单位矩阵 A 表示 矩阵
  • switch-case流程图

    第一种情况 每一个case后面都有break switch p case 1 process 1 break case 2 process 2 break case n process n break default process n 1
  • 02-蘑菇街爬虫mw-sign参数破解

    02 蘑菇街爬虫mw sign参数破解 目录 01 蘑菇街爬虫准备工作1 02 蘑菇街爬虫mw sign参数破解 03 蘑菇街爬虫概述 04 蘑菇街爬虫 店铺搜索页面 mw sign参数分析 经过网友断点测试 我们发现mw sign是经过两
  • 运维重点小知识点总结

    1 可以使用lsblk命令树形方式显示所有可用块设备情况 lsblk NAME MAJ MIN rm SIZE RO type mountpoint sda 8 0 0 232 9G 0 disk sda1 8 1 0 46 6G 0 pa
  • 使用Python批量提取TRMM降水数据均值

    今天给大家分享一个数据平均值的吧 好像从来没有分享过这个内容 以问题为导向利用Python帮助我们解决在科研中遇到的问题 最近有同学在处理TRMM降水数据的时候 说是要提取每个月的均 值出来 数据格式是tif栅格 目的也是非常明确的 提取多
  • Linux文件管理(文件/目录的创建、更改、删除)

    一 Linux文件命名规则 1 严格区分大小写 2 文件命名不能使用字符 3 目录或文件名的长度不能超过255个字符 建议 1 文件名由两个或两个以上单词组成时 尽量使用 来代替space键 2 尽量不用字母的大小写来区分文件或者目录 4
  • curl

    什么是curl命令 curl是利用URL语法在命令行方式下工作的开源文件传输工具 它被广泛应用在Unix 多种Linux发行版中 并且有DOS和Win32 Win64下的移植版本 如何在windows下使用curl命令 第一步 进入curl
  • 在 AIX 5.3 和 6.1 中使用 Veritas Volume Manager (VxVM) V5 管理逻辑卷

    引言 在 UNIX 存储管理市场上 有两家主要的领先厂商 IBM 和 Veritas 现在的 Symantec 两家公司都提供帮助 UNIX 系统管理员以非常灵活的方法管理存储设备的产品 Veritas 提供了 Veritas Volume
  • feign接口自动生成工具

    Feign Generator 介绍 最近发现开发spring cloud时 编写feign接口是一件痛苦的事 不仅要编写feign接口 还有fallback 请求参数和返回值等 大量重复工作 很浪费时间 于是便想到可以编写工具自动生成fe
  • Mysql触发器

    本文主针对小白 如何在数据库有数据变动得时候及时得到内容 MySQL触发器 Triggers 是一种数据库对象 它在指定的事件 例如插入 更新或删除数据 发生时自动执行一系列预定义的操作 触发器通常用于实施业务规则 数据完整性约束和自动化任