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`)

Запрос завершается без ошибки и без добавления записи, а нужно получить ошибку о том, что добавить не удалось. Как можно это организовать?

Так как записи добавляются массово, то одиночные добавления или проверочные выборки - не эффективны.


Ответы (0 шт):