Sqlite3 运行时错误:FOREIGN KEY 约束失败 (19)

问题描述 投票:0回答:1

我的数据库有 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)

可能是什么原因造成的?

sql sqlite
1个回答
0
投票

当您将新行插入

chats
时,触发器被触发。它得出的结论是计数大于 2,并尝试以最小 last_access_time
删除
行。

但是,似乎(至少有一行)来自

messages
references 该行导致了错误。因为,如果数据库允许您删除该行,您将得到一个orphan行——其父行不再存在。

© www.soinside.com 2019 - 2024. All rights reserved.