INSERT ... ON DUPLICATE KEY - 如何在非主键上执行此操作?

时间:2012-07-12 12:52:02

标签: mysql sql

我有以下问题。我有一个包含idtrack_idartist_idtitle等列的表格。唯一唯一的键是主键id,它是一个自动增量int。 track_id不是唯一的。

因此出现了我需要为具有特定title的记录更新track_id的情况。如果不存在此类记录,则应创建新记录。我不能使用REPLACE INTO或INSERT ... ON DUPLICATE KEY,因为它们使用唯一键或主键。我也不能使用多个查询,因为要进入的系统要求在单个查询中完成这些类型的操作。该查询可以根据需要复杂化,但它必须存在于一个查询中。

如何做到这一点?

2 个答案:

答案 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数据库中的单个标量非常快。