MySql Вставить несколько и игнорировать повторяющиеся записи - PullRequest
0 голосов
/ 04 февраля 2020

У меня есть MySQL INSERT-запрос, который добавляет продукт в несколько категорий:

INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 22);

Это прекрасно работает, однако, если я добавлю этот же продукт в другую подкатегорию от того же родителя, он будет создать дубликаты записей для родительских категорий:

INSERT INTO _categories_products (product_id, category_id) VALUES (1, 14), (1, 8), (1, 1), (1, 23);

enter image description here

Вопрос: Каким будет соответствующий запрос MySQL, который игнорирует вставку дубликатов записей ? Другими словами, второй запрос должен ВСТАВИТЬ только одну запись: 1, 23.

Я пробовал также ВСТАВИТЬ ИГНОР В, но ничего не изменилось.

Спасибо!


1 Ответ

4 голосов
/ 04 февраля 2020

Для начала вы хотите создать уникальное ограничение для категорий / кортежей товаров, чтобы избежать дубликатов:

alter table _categories_products  
    add constraint _categories_products _bk 
    unique (product_id, category_id);

С этого момента попытка вставить дубликаты в таблицу по умолчанию поднять ошибку. Вы можете перехватить эту ошибку и обработать ее с помощью MySQL on duplicate key синтаксиса :

insert into _categories_products (product_id, category_id) 
values (1, 14), (1, 8), (1, 1), (1, 23)
on duplicate key update product_id = values(product_id)

. В случае дублирования вышеупомянутый запрос выполняет глупое обновление product_id, которое на самом деле превращает вставку в неоперативный.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...