创建MySQL触发器:插入Scanned表后同步Inventory表的Machine_type
自动同步Scanned表的Machine_type字段(基于Inventory表匹配)
最实用的方案是用数据库触发器实现自动同步,也可以在插入时直接关联查询完成操作,以下是具体实现:
方案1:数据库触发器(自动触发,无需额外代码)
触发器会在Scanned表插入数据后立即执行匹配更新,适合需要自动同步的场景。
MySQL 代码示例
DELIMITER // CREATE TRIGGER update_scanned_machine_type AFTER INSERT ON Scanned FOR EACH ROW BEGIN -- 通过Barcode关联Inventory,更新刚插入的Scanned行的Machine_type UPDATE Scanned s JOIN Inventory i ON s.Barcode = i.Barcode SET s.Machine_type = i.Machine_type WHERE s.ID = NEW.ID; END // DELIMITER ;
SQL Server 代码示例
CREATE TRIGGER update_scanned_machine_type ON Scanned AFTER INSERT AS BEGIN SET NOCOUNT ON; UPDATE s SET s.Machine_type = i.Machine_type FROM Scanned s INNER JOIN Inventory i ON s.Barcode = i.Barcode INNER JOIN inserted ins ON s.ID = ins.ID; END;
方案2:插入时直接关联查询(手动触发)
如果不需要自动同步,也可以在插入Scanned数据时直接从Inventory获取对应的Machine_type,一步完成插入:
单条插入示例
INSERT INTO Scanned (Barcode, Machine_type) SELECT '目标条码', i.Machine_type FROM Inventory i WHERE i.Barcode = '目标条码';
批量插入示例
INSERT INTO Scanned (Barcode, Machine_type) SELECT temp.Barcode, i.Machine_type FROM ( SELECT '条码1' AS Barcode UNION ALL SELECT '条码2' AS Barcode UNION ALL SELECT '条码3' AS Barcode ) temp LEFT JOIN Inventory i ON temp.Barcode = i.Barcode;
注意事项
- 给Inventory表的
Barcode字段添加索引,避免数据量大时匹配效率低下 - 如果Inventory中无匹配的Barcode,Scanned的Machine_type会被设为
NULL,可根据需求添加默认值处理 - 触发器会轻微影响插入性能,高并发场景建议先评估再使用
内容的提问来源于stack exchange,提问作者Kavinda nuwan
相关产品推荐
相关产品推荐

