ON DUPLICATE KEY UPDATE
Конструкция ON DUPLICATE KEY UPDATE используется совместно
с командой INSERT для реализации upsert-логики.
Если при вставке возникает конфликт по уникальному
или первичному ключу, выполняется обновление
указанных полей существующей записи.
Синтаксис
INSERT INTO table_name (column_list)
VALUES (value_list)
ON DUPLICATE KEY UPDATE
column = expression
Таблицы для примеров
| id | name | login_count | |
|---|---|---|---|
| 1 | ivan@example.com | Ivan | 3 |
| 2 | olga@example.com | Olga | 1 |
Пример
Давайте при попытке вставки пользователя с уже существующим email обновим имя пользователя:
INSERT INTO users (id, email, name, login_count)
VALUES (3, 'ivan@example.com', 'Ivan Updated', 1)
ON DUPLICATE KEY UPDATE
name = 'Ivan Updated'
Результат выполнения кода:
| id | name | login_count | |
|---|---|---|---|
| 1 | ivan@example.com | Ivan Updated | 3 |
| 2 | olga@example.com | Olga | 1 |
Пример
Давайте при конфликте ключа увеличим счётчик входов пользователя на единицу:
INSERT INTO users (id, email, name, login_count)
VALUES (3, 'olga@example.com', 'Olga', 1)
ON DUPLICATE KEY UPDATE
login_count = login_count + 1
Результат выполнения кода:
| id | name | login_count | |
|---|---|---|---|
| 1 | ivan@example.com | Ivan Updated | 3 |
| 2 | olga@example.com | Olga | 2 |
Смотрите также
-
команду
INSERT,
которая добавляет записи -
команду
UPDATE,
которая изменяет записи -
команду
UNIQUE,
которая определяет уникальность значения -
команду
PRIMARY KEY,
которая задаёт уникальный идентификатор строки