SQLite ВСТАВЛЯЮТ - НА ДУБЛИРУЮЩЕМСЯ КЛЮЧЕВОМ ОБНОВЛЕНИИ (UPSERT)

MySQL имеет что-то вроде этого:

INSERT INTO visits (ip, hits)
VALUES ('127.0.0.1', 1)
ON DUPLICATE KEY UPDATE hits = hits + 1;

Насколько я знаю, что эта функция не существует в SQLite, что я хочу знать, то, если существует какой-либо путь к achive тот же эффект, не имея необходимость выполнять два запроса. Кроме того, если это не возможно, что делает Вы предпочитаете:

  1. ВЫБЕРИТЕ + (ВСТАВЬТЕ или ОБНОВИТЕ), или
  2. ОБНОВЛЕНИЕ (+ ВСТАВЛЯЮТ, если ОБНОВЛЕНИЕ перестало работать),
92
задан Alix Axel 29 November 2018 в 15:55
поделиться

2 ответа

Я бы предпочел UPDATE (+ INSERT, если UPDATE не удалось) . Меньше кода = меньше ошибок.

18
ответ дан 24 November 2019 в 06:32
поделиться
INSERT OR IGNORE INTO visits VALUES ($ip, 0);
UPDATE visits SET hits = hits + 1 WHERE ip LIKE $ip;

Это требует, чтобы столбец «ip» имел ограничение UNIQUE (или PRIMARY KEY).


РЕДАКТИРОВАТЬ: Еще одно отличное решение: https://stackoverflow.com/a/4330694/89771 .

115
ответ дан 24 November 2019 в 06:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: