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

SQLite3中触发表更新时同步更新其他表的触发器配置疑问

SQLite触发器问题:仅更新toaddress时如何获取senderip和fromaddress的值

首先得指出你原触发器里的一个关键问题:SQLite的触发器里并没有inserted这个对象哦,咱们应该用NEW(代表更新后的行记录)或者OLD(代表更新前的行记录)来获取触发行的数据。

接下来解答你的核心疑问:

  • 不管你只更新toaddress字段,还是同时更新多个字段,NEW和OLD都会包含整行的所有字段值。因为你设置的是AFTER UPDATE OF toaddress,触发条件只有toaddress被修改时才会执行触发器,所以此时senderip和fromaddress并没有被更新,NEW.senderip和OLD.senderip的值是完全一致的,fromaddress同理。
  • 根据你的需求——要匹配triplets表中与更新后的tripletlist行senderip、fromaddress、toaddress都一致的记录,直接用NEW来获取这三个字段的值就可以了,逻辑更直观。

下面是修正后的触发器代码:

CREATE TRIGGER update_accept 
AFTER UPDATE OF toaddress ON tripletlist 
FOR EACH ROW 
BEGIN
  -- 用更新后的行数据匹配triplets表,accepted字段加1
  UPDATE triplets 
  SET accepted = accepted + 1 
  WHERE senderip = NEW.senderip 
    AND fromaddress = NEW.fromaddress 
    AND toaddress = NEW.toaddress;
  
  -- 删除tripletlist中toaddress不为空的记录(保留你的原有逻辑)
  DELETE FROM tripletlist WHERE toaddress != "";
END;

补充一点小提醒:如果未来你的业务逻辑可能允许同时更新senderip或fromaddress,那就要区分NEW和OLD的使用场景了——如果要基于更新前的数据做匹配就用OLD,基于更新后的数据就用NEW。但就你当前的触发条件(仅更新toaddress)来说,两者没有区别。

内容的提问来源于stack exchange,提问作者be MrZulf

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 01:17:39