Вставить или обновить значение счетчика, а затем вернуть значение счетчика в одном операторе

#sqlite

#sqlite

Вопрос:

Я использую SQLite 3.8, без поддержки upsert: https://www.sqlite.org/lang_UPSERT.html

У меня есть следующая таблица.

 CREATE TABLE "data" (
    "name"  TEXT NOT NULL,
    "counter" INTEGER NOT NULL
);

CREATE UNIQUE INDEX name_index ON data (name);
 

Я смог вставить или обновить счетчик, используя следующий способ.

 INSERT OR REPLACE INTO data
VALUES ("the name",
  COALESCE(
    (SELECT counter FROM data
       WHERE name="the name"),
    0)   1);
 

Тем не менее, я также хотел бы иметь возможность возвращать вновь вставленный (или увеличенный) счетчик в одном операторе.

Я делаю это в 2 операторах, что может вызвать состояние гонки в многопоточном приложении.

2 оператора

 INSERT OR REPLACE INTO data
VALUES ("the name",
  COALESCE(
    (SELECT counter FROM data
       WHERE name="the name"),
    0)   1);

SELECT counter FROM data where name="the name";
 

Возможно ли выполнить все в пределах 1 оператора?

Комментарии:

1. Разве вы не можете использовать last_insert_rowid() для получения нового созданного идентификатора?

2. В приведенном выше примере нас интересует counter столбец.

3. Понятно, это не столбец идентификаторов, извинения

4. Нет, вы не можете сделать это в одном операторе.

5. «Нет, вы не можете» — это рискованный ответ на StackOverflow, но с хорошим объяснением также может быть абсолютно отличным. @forpas