在SQLite中,如何防止REPLACE更新现有记录的id?

在SQLite中,如何防止REPLACE更新现有记录的id?,sqlite,insert,replace,Sqlite,Insert,Replace,这是一个基本的例子。sqlite文件存储单个项目文件的KVP: CREATE TABLE settings (id INTEGER PRIMARY KEY ASC,rel,key,val) rel通常链接到现有记录上的ids,但没有任何特定约束 此设置表包含诸如key=name、value=Josh和key=url、value=www.site.com等设置。我正在使用的sqlite实现忽略了执行中的多个查询,并且循环速度很慢,因此我只能做如下操作: REPLACE INTO settings

这是一个基本的例子。sqlite文件存储单个项目文件的KVP:

CREATE TABLE settings (id INTEGER PRIMARY KEY ASC,rel,key,val)
rel
通常链接到现有记录上的
id
s,但没有任何特定约束

此设置表包含诸如
key=name、value=Josh
key=url、value=www.site.com
等设置。我正在使用的sqlite实现忽略了执行中的多个查询,并且循环速度很慢,因此我只能做如下操作:

REPLACE INTO settings(key, val) 
    SELECT 'name', 'Vosh' UNION SELECT 'url', 'www.site.com' UNION ...
这通常会将
Josh
的名称更新为
Vosh
,但它也会设置一个新的id,从而打破另一行中由
rel
引用的特定记录id之间的任何关系


我应该如何处理这个问题?

你说的循环速度慢是什么意思?每个查询执行缓慢?查询执行功能将日志记录到一个文件中,然后将输出与查询一起广播到控制台(这会占用100-200毫秒)。我正在尝试将此机制实现到其他模块中,这些模块将复杂的图表关系存储到表中,价值数千条记录。请确定,您是否在单独的事务中运行这些更新?据我所知不是这样。我没有任何
BEGIN
语句。那么默认情况下,每次更新运行一个事务。你对每一条指令都精确计时了吗?