我有一个数据库,有两个表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输出
PRAGMA table_info(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
然而,在聊天时插入时,我得到了这个错误:
sqlite> insert into chats(id) values('abcd1234')
错误:没有此列:报文索引
为什么会这样?
编辑
解决了问题。更新了模式格式,以便更好地解释答案。
2条答案
按热度按时间k7fdbhmy1#
现有列上的SQLite
no such column
错误触发器尝试向
message_index
列插入值,但该列不存在。这就是为什么你有这个错误no such column
。在创建上述触发器之前,需要确定
messages
表中是否存在message_index
列:添加列后,可以再次创建触发器。
至于触发器本身,它看起来是正确的。
g0czyy6m2#
该字段可为空。当你在sqlite中插入时初始化可空字段时,它会抛出错误。为什么我不知道?我从触发器中删除了
message_index
,并更新了另一个触发器中的值。这解决了我的用例的问题。如果有人有更多关于SQLite内部工作原理的信息,遇到这个问题,请回答为什么会发生这个错误。我会把它标记为答案。