У меня есть таблица с именем "images":
CREATE TABLE images (
id INTEGER PRIMARY KEY AUTOINCREMENT,
url TEXT NOT NULL UNIQUE,
caption TEXT
);
При вставке строки я бы хотел, чтобы столбец URL был уникальным.В то же время я хотел бы узнать идентификатор строки с этим URL.
INSERT OR IGNORE images (url, caption) VALUES ("http://stackoverflow.com", "A logo");
SELECT last_insert_rowid(); -- returns the id iff there was an insert.
Конечно, я хотел бы сделать это как можно быстрее, хотя моя первая мысль былав соответствии со следующим псевдокодом:
int oldID = execSQL("SELECT last_insert_rowid()");
execSQL("INSERT OR IGNORE images (url, caption) VALUES ('http://stackoverflow.com', 'A logo')");
int newID = execSQL("SELECT last_insert_rowid()");
if (newID != oldID) {
// there was an insert.
return newID;
} else {
// we'd already seen this URL before
return execSQL("SELECT id FROM images WHERE url = 'http://stackoverflow.com'");
}
Но это кажется безнадежно неэффективным.
Какой самый эффективный способ получения идентификатора строки с автоинкрементом из оператора INSERT OR IGNORE.