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

SQLite触发器报错:no such column: OLD.age 问题求助

问题分析:INSERT触发器引用OLD字段引发的错误

核心问题

你在**INSERT类型的触发器bulk_update_main**里使用了OLD.age,但数据库的INSERT操作触发器上下文里根本不存在OLD对象——这就是报错no such column: OLD.age的根源。

触发器上下文对象的规则

数据库触发器针对不同操作提供的上下文对象是固定的:

  • INSERT操作:仅提供NEW对象,代表即将插入的新行数据,没有OLD(因为插入前该行不存在)
  • UPDATE操作:同时提供OLD(更新前的旧数据)和NEW(更新后的新数据)
  • DELETE操作:仅提供OLD对象,代表即将删除的旧行数据

你执行的是INSERT INTO main (pubKey, age) VALUES (1, 1);,触发的是INSERT类型触发器,此时调用OLD.age相当于访问一个不存在的字段,必然报错。删除这条语句后,触发器不再访问无效对象,错误自然消失。

修正建议

  1. 检查触发器定义:如果bulk_update_main本来是要处理UPDATE操作,那要确保它的触发时机是AFTER UPDATE ON main(或BEFORE UPDATE),而非INSERT触发。
  2. 调整INSERT触发器逻辑:如果确实需要在INSERT时更新mainCount,把OLD.age替换为NEW.age,同时根据业务需求调整count_的值(比如插入时应该是+1而非-1,这取决于你的计数逻辑)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.19 22:27:34