我有以下问题。我有一个包含id
,track_id
,artist_id
和title
等列的表格。唯一唯一的键是主键id
,它是一个自动增量int。 track_id
不是唯一的。
因此出现了我需要为具有特定title
的记录更新track_id
的情况。如果不存在此类记录,则应创建新记录。我不能使用REPLACE INTO或INSERT ... ON DUPLICATE KEY,因为它们使用唯一键或主键。我也不能使用多个查询,因为要进入的系统要求在单个查询中完成这些类型的操作。该查询可以根据需要复杂化,但它必须存在于一个查询中。
如何做到这一点?
答案 0 :(得分:2)
按此顺序执行这两个查询:
update track set
title = ?
where track_id = ?;
insert into track (nonkey_col_1, nonkey_col_2, ...)
select 'nonkey_col_1_value', 'nonkey_col_2_value', ...
from track
where not exists (select * from track where track_id = ?)
limit 1;
其中只有一个会产生任何影响:第一个只在有一行时执行。第二个仅在不是行时执行。
答案 1 :(得分:1)
你只想做一个upsert。如果不存在则插入,如果存在则更新。没有办法用android来做,因为它不支持多个查询。
我对这类事情的处理方法是:首先select track_id from ... where track_id=THE_ID
。如果resultCursor.getCount()!=0
然后该行存在,那么您需要update
,否则insert
。
至于时间,sqlite数据库中的单个标量非常快。