INSERT ON DUPLICATE KEY UPDATE с двумя ключами и ошибкой дублирования
Есть таблица:
CREATE TABLE `items`
(
`group_id` VARCHAR(255) NOT NULL,
`id` VARCHAR(255) NOT NULL,
`name` VARCHAR(255) NOT NULL,
PRIMARY KEY (`group_id`, `id`),
UNIQUE KEY `unique_name` (`group_id`, `name`)
) ENGINE = InnoDB
CHARACTER SET = utf8mb4
COLLATE utf8mb4_unicode_ci
;
- В каждой группе свои уникальные идентификаторы.
- В рамках группы название записей уникальны.
idне может меняться,nameможет меняться, но должно оставаться уникальным.
Запрос добавления новых записей с обновлением имен старых:
INSERT INTO `items`
(`group_id`, `id`, `name`)
VALUES
("group1", "id1", "name1"),
("group1", "id2", "name2")
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`)
- Нужно обновить
nameдля уже существующегоid. - Нужно получить ошибку, если будет попытка добавить новую запись с уже существующим
name.
Выполняем запрос добавления новой записи, с новым id и уже существующим name:
INSERT INTO `items`
(`group_id`, `id`, `name`)
VALUES
("group1", "id3", "name2")
ON DUPLICATE KEY UPDATE `name` = VALUES(`name`)
Запрос завершается без ошибки и без добавления записи, а нужно получить ошибку о том, что добавить не удалось. Как можно это организовать?
Так как записи добавляются массово, то одиночные добавления или проверочные выборки - не эффективны.