复盘—MySQL触发器实现监听数据表值的变化,对其他数据表做更新

文章目录

  • MySQL交换数据库表中两列的值(额外的知识)
  • 为防止后面有疑问,提前解释为什么需要 `$$` ?
  • 第一版需求
  • 第二版需求
  • 第三版需求
    • 注意事项:
  • 存在的严重问题
  • 最终版
    • 关键修复说明:
    • 完整测试场景:
    • 额外建议(如果需要显式处理NULL):
    • COALESCE函数
  • 业务中出现的问题

MySQL交换数据库表中两列的值(额外的知识)

UPDATE your_table t1, your_table t2
SET t1.column1 = t2.column2,t1.column2 = t2.column1
WHERE t1.id = t2.id
AND your_condition;

以下操作需要注意:确保MySQL用户有创建触发器的权限(TRIGGER权限);注意避免触发器和业务逻辑的递归调用(如:订单表的更新又触发其他触发器)

为防止后面有疑问,提前解释为什么需要 $$

  1. 默认分隔符问题:

    • MySQL 默认使用分号 ; 作为语句结束符

    • 但触发器/存储过程等包含多个 SQL 语句,内部也有 ;

    • 如果直接用 ;,MySQL 会在第一个 ; 就认为语句结束

  2. 解决方案

    DELIMITER $$  -- 将结束符临时改为 $$CREATE TRIGGER ...  -- 多行触发器定义
    BEGIN...;  -- 内部语句仍用分号...;
    END$$     -- 用 $$ 表示整个触发器结束DELIMITER ;  -- 恢复默认分隔符
    
  3. 具体解析

    DELIMITER $$       -- 告诉MySQL:"从现在开始,用$$作为语句结束符"CREATE TRIGGER...  -- 开始定义触发器
    BEGIN...;           -- 触发器内部语句(有分号但不会立即执行)...;
    END$$              -- 用$$表示整个触发器定义结束DELIMITER ;        -- 恢复默认结束符(分号)
    
  4. 类比理解

    场景 类比
    默认分号 ; 句号 .(结束一个完整句子)
    创建触发器 写一段包含多个句子的段落
    DELIMITER $$ 声明:“接下来我要说一大段话,直到听到$$才算结束”
    END$$ “我说完了($$)”
    DELIMITER ; “现在恢复,句号表示句子结束”
  5. 重要提示:

    1. $$ 不是关键字,可以替换成其他符号(常用 //%%

      DELIMITER //
      CREATE TRIGGER ...
      BEGIN ... END//
      DELIMITER ;
      
    2. 必须成对出现:

      开始:DELIMITER 自定义符号

      结束:自定义符号 + DELIMITER ;

    3. 只在命令行或脚本中需要:

      • 在 MySQL Workbench 等图形工具中通常会自动处理

      • 但在 SQL 脚本或命令行中必须显式使用

    简单说:$$ 就是个"临时盾牌",保护触发器内部的 ; 不被误认为是结束符,确保整个触发器被完整解析。

第一版需求

需要监听订单商品表的中申请中数量的更新,如果更新的值不为0,则需要修改对应订单表中订单的remark字段的值为申请售后中

DELIMITER $$CREATE TRIGGER after_order_item_update
AFTER

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

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

相关文章

SpringCloud【Sentinel】

1,工作原理 2,常见规则 流量控制(FlowRule) 1,阈值类型设置如下 单机均摊:每个机器均摊,比如阈值填5,三个机器,就个机器都可以有5个 总体阈值:所有机器总阈…

解构未来金融:深入剖析DeFi与去中心化交易所(DEX)的技术架构

今天,我们来聊一个颠覆传统金融界的热门话题——DeFi(去中心化金融)。大家可能听说过它如何承诺将银行、交易所、保险等金融服务构建在一个开放、无需许可的区块链网络上。而这一切魔法的核心,正是其独特的“技术架构”。 在这篇文…

中国西北典型绿洲区土壤水分特征(2018-2019年)

数据集摘要该数据包含张掖绿洲黑河沿岸湿地、过渡带杨树林土壤水分、温度数据。数据采集时间为2018年至2019年,采集地点为张掖绿洲,数据为日数据。该数据集是按照课题制定的试验方案和中国生态系统研究网络编著的陆地生态系统水土气生观测规范进行数据的…

MySQL高可用部署

目录 一、MHA(一主多从模式) 1.环境准备(所有节点) 2. 部署 MySQL 主从复制(MasterSlave) 3.部署 MHA Manager(管理节点) (1)安装 MHA Manager &#xf…

从 XSS 到 Bot 攻击:常见网络攻击防不胜防?雷池 WAF 用全场景防护为网站筑牢安全墙

1. 网络攻击类型当前常见的网络攻击类型包括:重放攻击(HTTP Request Replay Attack):攻击者截获合法用户的 HTTP 请求并重新发送,以欺骗服务器执行相同操作。危害包括消耗服务器资源、大量抓取数据或绕过认证操作敏感接…

【王树森推荐系统】推荐系统涨指标的方法05:特殊用户人群

为什么要特殊对待特殊人群? 新用户,低活用户的行为很少,个性化推荐不准确。个性化的召回和排序都需要基于用户的历史行为,如果历史行为少,个性化就做不好,尤其是新用户,这就需要策略把个性化做的…

Java 大视界 -- Java 大数据在智能家居能源管理与节能优化中的深度应用(361)

Java 大视界 -- Java 大数据在智能家居能源管理与节能优化中的深度应用(361)引言:正文:一、Java 构建的智能家居能源数据架构1.1 多源能耗数据实时采集1.2 家庭能源画像与异常检测二、Java 驱动的节能策略与智能控制2.1 多场景节能…

从零开始的云计算生活——番外5,使用ELK实现对应用日志的监控

目录 一.环境准备 试验机安装 修改文件配置 二.收集测试机(test)日志 配置pipline文件 配置filebeat配置文件 三.收集测试机nginx日志 下载安装nginx 修改filebeat文件 修改pipline文件 四.收集网络服务模块日志 1.DHCP 下载dhcp 修改配置…

Node.js:函数、路由、全局对象

Node.js函数 在JavaScript中,一个函数可以作为另一个函数的参数,可以先定义一个函数,然后进行传递,也可以在传参的地方直接定义 function sayhello(){console.log("hello"); } function run(hello, value){hello();cons…

2025暑期—06神经网络-常见网络3

VGG16网络64个卷积核做两次卷积,填充后编程224X224X64 pooling 两次卷 pooling 三次卷...分辨率降低一半,通道数增加1倍所有卷积核都是3x3, 所有的pooling 都是2x2残差网络每一层的块都有越层的连接。

使用 FastAPI 构建 Elasticsearch API

作者:来自 Elastic Jeffrey Rengifo 学习如何使用 Pydantic 模式和 FastAPI 后台任务,通过实际示例构建一个 Elasticsearch API。 想获得 Elastic 认证吗?查看下一期 Elasticsearch Engineer 培训的时间! Elasticsearch 拥有丰富…

[2025CVPR-目标检测方向]FSHNet:一种用于3D物体检测的全稀疏混合网络。

1. ​简介​ 论文提出了FSHNet(Fully Sparse Hybrid Network),一种用于3D物体检测的全稀疏混合网络。FSHNet旨在解决现有稀疏3D检测器的两大核心问题:长距离交互能力弱和网络优化困难。稀疏检测器(如VoxelNeXt和SAFDN…

MySql 8.0.42 zip版安装教程和使用

今天要装个MySQL,就按照自己以前的教程来做,不知道是不是版本更新了的原因,又遇到了一点小阻碍,于是再记录一下吧。 下载MySQL 下载链接:MySQL :: Download MySQL Community Serverhttps://dev.mysql.com/downloads/…

【lucene】实现knn

在 Lucene 中,可以通过 KnnFloatVectorQuery 和 KnnFloatVectorField 来实现 KNN(k-Nearest Neighbors)搜索。以下是具体介绍:1. 功能原理KnnFloatVectorQuery 是 Lucene 用于执行最近邻搜索的查询类,它可以在一个字段…

RabbitMQ实践学习笔记

RabbitMQ实践 以下是关于RabbitMQ实践的整理,涵盖常见场景和示例代码(基于Markdown格式)。内容按模块分类,避免步骤词汇,直接提供可操作的方法: 基础连接与队列声明 使用Python的pika库建立连接并声明队列: import pikaconnection = pika.BlockingConnection(pika.C…

量子生成对抗网络:量子计算与生成模型的融合革命

引言:当生成对抗网络遇上量子计算在人工智能与量子计算双重浪潮的交汇处,量子生成对抗网络(Quantum Generative Adversarial Networks, QGAN)正成为突破经典算力瓶颈的关键技术。传统生成对抗网络(GAN)在图…

VBA 多个选项,将选中的选项录入当前选中的单元格

1、使用LISTBOX插件&#xff0c;选中后回车录入 维护好数据&#xff0c;并新增一个activeX列表框插件 Private Sub Worksheet_SelectionChange(ByVal Target As Range)If Target.Count > 1 Then Exit SubIf Target.Row > 2 And Target.Row < 10 And Target.Column 2…

【NLP舆情分析】基于python微博舆情分析可视化系统(flask+pandas+echarts) 视频教程 - 主页-微博点赞量Top6实现

大家好&#xff0c;我是java1234_小锋老师&#xff0c;最近写了一套【NLP舆情分析】基于python微博舆情分析可视化系统(flaskpandasecharts)视频教程&#xff0c;持续更新中&#xff0c;计划月底更新完&#xff0c;感谢支持。今天讲解主页-微博点赞量Top6实现 视频在线地址&…

SAP调用外部API

SAP需求将中文字符转化为对应的拼音具体思路,由于sap中没有将中文字符转化为拼音的函数或方法类,则以http请求访问外部服务器发布的API服务,然后获取其返回值即可1.调用外部网站上提供的api缺点:免费次数有限,后需要充值这里是用www格式的json报文*&----------------------…

(12)机器学习小白入门YOLOv:YOLOv8-cls 模型微调实操

YOLOv8-cls 模型微调实操 (1)机器学习小白入门YOLOv &#xff1a;从概念到实践 (2)机器学习小白入门 YOLOv&#xff1a;从模块优化到工程部署 (3)机器学习小白入门 YOLOv&#xff1a; 解锁图片分类新技能 (4)机器学习小白入门YOLOv &#xff1a;图片标注实操手册 (5)机器学习小…