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

SQLite触发‘no such column’错误:存在的列为何报错?

问题原因说明

问题场景

我有一个包含chats和messages两张表的数据库,创建了如下触发器:

CREATE TRIGGER IF NOT EXISTS insert_system_message
AFTER INSERT ON chats
BEGIN
    INSERT INTO messages (role,content,message_index,"chat_id")
    VALUES('role','message',0,NEW.id);
END;

执行PRAGMA table_info(messages)查看messages表的列结构,输出如下:

cid         name        type        notnull     dflt_value  pk
----------  ----------  ----------  ----------  ----------  ----------
0           id          INTEGER     1                       1
1           role        TEXT        1                       0
2           content     TEXT        1                       0
3           message_in  INTEGER     0                       0
4           chat_id     TEXT        1                       0
5           previous_m  INTEGER     0                       0

当执行插入语句向chats表添加数据时:

insert into chats(id) values('abcd1234')

触发错误:

Error: no such column: message_index

问题原因

从PRAGMA的输出结果可以明确看到,messages表中不存在名为message_index的列,表内对应的列实际名为message_in(对应输出第三行的name字段)。

触发器的INSERT语句中错误引用了不存在的message_index列,这就是导致执行时触发“列不存在”错误的直接原因。

只需将触发器中的message_index替换为表中实际存在的message_in列名即可解决问题,修改后的触发器代码如下:

CREATE TRIGGER IF NOT EXISTS insert_system_message
AFTER INSERT ON chats
BEGIN
    INSERT INTO messages (role,content,message_in,"chat_id")
    VALUES('role','message',0,NEW.id);
END;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 15:42:33