如何在表的Trigger Before Insert触发器中获取未入库JSON字段的新值
触发器Before Insert场景下取待插入行JSON值的解决方案
在 BEFORE INSERT 触发器的执行阶段,待插入的数据还未实际写入表中,因此无法通过查询原表获取对应值,此时直接使用数据库提供的 NEW 关键字即可读取待插入行的所有字段值,包括JSON类型字段。
修正后的查询逻辑
你不需要通过子查询查表获取JSON属性,直接通过NEW关键字指向待插入行的JSON字段取值即可,调整后的语句如下:
SELECT id FROM TABLE_B WHERE `group` = NEW.json_column->>'$.group' AND doc = NEW.json_column->>'$.doc'
注意:上述代码中的
json_column需要替换为你TABLE_A中实际存储JSON的字段名,group是SQL保留字,作为字段名使用时需要加反引号转义避免语法报错。
完整触发器示例(MySQL环境)
DELIMITER // CREATE TRIGGER trg_table_a_before_insert BEFORE INSERT ON TABLE_A FOR EACH ROW BEGIN -- 示例逻辑:查询TABLE_B的id并赋值给TABLE_A的关联字段 DECLARE b_id INT DEFAULT NULL; SELECT id INTO b_id FROM TABLE_B WHERE `group` = NEW.json_column->>'$.group' AND doc = NEW.json_column->>'$.doc'; -- 你可以根据需求添加后续逻辑,比如校验、字段赋值等 SET NEW.b_ref_id = b_id; END // DELIMITER ;
不同数据库适配说明
- PostgreSQL环境下JSON取值语法为
NEW.json_column->>'group',NEW关键字的使用逻辑和MySQL一致 - 也可以使用通用JSON函数写法兼容更多数据库版本:
JSON_EXTRACT(NEW.json_column, '$.group'),效果和箭头运算符完全一致
内容的提问来源于stack exchange,提问作者William Gomes Jarzinski
相关产品推荐
相关产品推荐

