復盤—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
英文地址,請注明出處:http://en.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)機器學習小…