При дублировании ключа игнорировать?
Ребята, я пытаюсь закончить этот запрос → в моем поле тега установлено значение UNIQUE, и я просто хочу, чтобы база данных игнорировала любой повторяющийся тег.
INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c')
ON DUPLICATE KEY IGNORE '*the offending tag and carry on*'
или даже это было бы приемлемо
INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c')
ON DUPLICATE KEY UPDATE '*the offending tag and carry on*'
Ответы
Ответ 1
Предположите НЕ использовать INSERT IGNORE, поскольку он игнорирует ВСЕ ошибки (т.е. его неаккуратное глобальное игнорирование).
Вместо этого, поскольку в вашем примере tag
есть уникальный ключ, используйте:
INSERT INTO table_tags (tag) VALUES ('tag_a'),('tab_b'),('tag_c') ON DUPLICATE KEY UPDATE tag=tag;
на дублированном ключе производит:
Запрос ОК, 0 строк затронуты (0,07 сек)
Ответ 2
Mysql имеет эту UPDATE INTO;
edit Похоже, они переименовали его в REPLACE
REPLACE работает точно так же, как INSERT, за исключением того, что если старая строка в таблице имеет такое же значение, как новая строка для ПЕРВИЧНЫЙ КЛЮЧ или УНИКАЛЬНЫЙ индекс, старая строка удаляется перед новой строкой вставляется