我的数据库有 2 个表;
messages
和 chats
。
.schema messages
CREATE TABLE IF NOT EXISTS "messages"(
"id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
"role" TEXT NOT NULL,
"content" TEXT NOT NULL,
"message_index" INTEGER NULL,
"chat_id" TEXT NOT NULL REFERENCES chats(id) ON DELETE CASCADE,
"previous_message" INTEGER NULL REFERENCES messages(id)
);
.schema chats
CREATE TABLE IF NOT EXISTS "chats"(
"id" TEXT NOT NULL,
"message_count" INTEGER NOT NULL DEFAULT(0),
"is_locked" INTEGER NOT NULL DEFAULT(0) CHECK("is_locked" IN(0, 1)),
"title" TEXT NULL,
"keywords" TEXT NULL,
"last_access_time" INTEGER NOT NULL DEFAULT(1697107687),
PRIMARY KEY("id")
);
CREATE TRIGGER delete_old_chat AFTER INSERT ON chats WHEN (SELECT COUNT(*) FROM chats) > 2 BEGIN DELETE FROM chats WHERE last_access_time = (SELECT MIN(last_access_time) FROM chats);END;
现在
chats
中已经有两个条目,所以我刚刚输入了这个查询
insert into chats(id) values(abcd);
我收到此错误消息。
运行时错误:FOREIGN KEY 约束失败 (19)
可能是什么原因造成的?
当您将新行插入
chats
时,触发器被触发。它得出的结论是计数大于 2,并尝试以最小 last_access_time
删除行。
但是,似乎(至少有一行)来自
messages
references 该行导致了错误。因为,如果数据库允许您删除该行,您将得到一个orphan行——其父行不再存在。