You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MySQL触发器实现:插入tb_data后更新tb_units指定行

实现tb_data新增数据同步更新tb_units的触发器

表结构说明

tb_data表

包含字段:

  • tb_id
  • timestamp
  • pagid(与tb_units的pag_id对应)
  • proid(对应tb_units的latest_profile)
  • status(对应tb_units的latest_status)
  • 其他字段

tb_units表

包含字段:

  • pag_id(唯一值,每个编号仅出现一次)
  • pag_sn
  • user
  • latest_profile(同步tb_data的proid)
  • latest_status(同步tb_data的status)
  • latest_feedback
  • latest_timestamp(同步tb_data的timestamp)

问题分析

需要在tb_data新增记录时,自动更新tb_units中对应pag_id的字段,确保tb_units始终保留每个pag_id的最新数据。你之前的触发器写法存在错误:直接引用tb_data.9C这类格式不符合语法规范,且未使用触发器专用的NEW关键字获取刚插入的记录值。

正确的触发器代码

仅更新已有记录的版本

如果tb_units中已存在所有需要同步的pag_id,使用以下触发器:

CREATE TRIGGER update_units
AFTER INSERT ON tb_data
BEGIN
    UPDATE tb_units
    SET 
        latest_profile = NEW.proid,
        latest_status = NEW.status,
        latest_timestamp = NEW.timestamp
    WHERE pag_id = NEW.pagid;
END;

支持更新或插入的版本(UPSERT)

如果存在tb_units中无对应pag_id的情况(即首次新增该pagid的记录),使用以下触发器(以SQLite为例,不同数据库语法略有差异):

CREATE TRIGGER update_or_insert_units
AFTER INSERT ON tb_data
BEGIN
    INSERT INTO tb_units (pag_id, latest_profile, latest_status, latest_timestamp)
    VALUES (NEW.pagid, NEW.proid, NEW.status, NEW.timestamp)
    ON CONFLICT(pag_id) DO UPDATE SET
        latest_profile = NEW.proid,
        latest_status = NEW.status,
        latest_timestamp = NEW.timestamp;
END;

触发器工作原理说明

  • AFTER INSERT ON tb_data:指定触发器在tb_data表完成插入操作后执行
  • NEW:触发器内置关键字,代表刚刚插入到tb_data中的新记录,通过NEW.字段名可获取该记录的对应字段值
  • 逻辑执行:通过新记录的pagid匹配tb_units中的pag_id,更新对应的字段值,确保tb_units始终保存最新的数据

内容的提问来源于stack exchange,提问作者Rasmus Hansen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 07:40:32