ON DUPLICATE KEY UPDATE

Конструкция ON DUPLICATE KEY UPDATE используется совместно с командой INSERT для реализации upsert-логики. Если при вставке возникает конфликт по уникальному или первичному ключу, выполняется обновление указанных полей существующей записи.

Синтаксис

sqlINSERT INTO table_name (column_list)
VALUES (value_list)
ON DUPLICATE KEY UPDATE
  column = expression

Таблицы для примеров

users
id email name login_count
1 ivan@example.com Ivan 3
2 olga@example.com Olga 1

Пример

Давайте при попытке вставки пользователя с уже существующим email обновим имя пользователя:

sqlINSERT INTO users (id, email, name, login_count)
VALUES (3, 'ivan@example.com', 'Ivan Updated', 1)
ON DUPLICATE KEY UPDATE
  name = 'Ivan Updated'

Результат выполнения кода:

users
id email name login_count
1 ivan@example.com Ivan Updated 3
2 olga@example.com Olga 1

Пример

Давайте при конфликте ключа увеличим счётчик входов пользователя на единицу:

sqlINSERT INTO users (id, email, name, login_count)
VALUES (3, 'olga@example.com', 'Olga', 1)
ON DUPLICATE KEY UPDATE
  login_count = login_count + 1

Результат выполнения кода:

users
id email name login_count
1 ivan@example.com Ivan Updated 3
2 olga@example.com Olga 2

Смотрите также

  • команду INSERT,
    которая добавляет записи
  • команду UPDATE,
    которая изменяет записи
  • команду UNIQUE,
    которая определяет уникальность значения
  • команду PRIMARY KEY,
    которая задаёт уникальный идентификатор строки