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
相关产品推荐
相关产品推荐

