MySQL Как избежать создания дубликатов строк в таблице без уникальных индексов и ключей?

Рейтинг: 0Ответов: 1Опубликовано: 01.02.2023

Имеется таблица:

CREATE TABLE `parts_images` (
    `parent_guid` VARCHAR(36) NOT NULL COLLATE 'utf8mb4_general_ci',
    `image_guid` VARCHAR(36) NOT NULL COLLATE 'utf8mb4_general_ci',
    `updated` DATETIME NOT NULL,
    INDEX `parent_guid` (`parent_guid`) USING BTREE,
    INDEX `image_guid` (`image_guid`) USING BTREE
)
COLLATE='utf8mb4_general_ci'
ENGINE=InnoDB;

Как избежать возникновения дублей при добавлении записей? Если бы был уникальный индекс или ключ, то использовал бы INSERT .... ON DUPLICATE KEY UPDATE, но с простыми индексами это не проходит. Используя такой вариант, не обновляется поле updated:

INSERT INTO parts_images (parent_guid, image_guid, updated)
SELECT 'ceaa75d5-4621-11ec-8718-408d5c5e066d', 
       'a3c9357c-b152-11ec-b37a-408d5c5e066d',
       '2023-01-30 22:03:55'  
WHERE NOT EXISTS  (SELECT 1
                   FROM parts_images 
                   WHERE (parent_guid LIKE 'ceaa75d5-4621-11ec-8718-408d5c5e066d'
                     AND image_guid LIKE 'a3c9357c-b152-11ec-b37a-408d5c5e066d'));   

Как выйти из положения, чтобы при совпадении первого и второго поля, обновлялось третье, а если записи с такой парой нет, то чтобы она добавлялась? Спасибо.

Ответы

▲ 0

Решения не нашли. Добавили уникальный индекс по одному из полей и замечательно начала работать конструкция с

INSERT .... ON DUPLICATE KEY UPDATE