我试图找出几个小时的问题:(
表看起来像这样:
CREATE TABLE IF NOT EXISTS pages(
id INTEGER PRIMARY KEY AUTOINCREMENT,
title TEXT,
parent INTEGER DEFAULT NULL,
content TEXT,
time INTEGER,
FOREIGN KEY(category) REFERENCES categories(id) ON DELETE CASCADE,
FOREIGN KEY(parent) REFERENCES pages(id) ON DELETE CASCADE,
UNIQUE(title) ON CONFLICT REPLACE
)
Run Code Online (Sandbox Code Playgroud)
插入查询:
INSERT OR REPLACE INTO pages (title, parent, content, time) VALUES (?, ?, ?, ?)
Run Code Online (Sandbox Code Playgroud)
title应该是唯一的,因此如果它找到具有相同标题的记录,则应替换它。它被替换了,但 ID 也会改变!这是一个问题,因为所有其他具有指向旧 ID 的父字段的记录都被删除了:(
为什么会这样?
您的 ID 设置为自动递增,因此当您替换某些内容时,ID 也会更改。因为替换意味着删除旧行并插入新行。我不知道 sqlite 是否有 INSERT ... ON DUPLICATE KEY UPDATE