Добавляем только несуществующие записи в таблицу (SQL)

Допустим, у нас есть таблица tags такого вида (ниже привожу sql-запрос для ее создания):

CREATE TABLE `tags` (
    `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
    `tag_name` varchar(45) COLLATE utf8_unicode_ci NOT NULL,
    `uid` int(11) unsigned NOT NULL,
    PRIMARY KEY (`id`),
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Ее смысл в том, что для каждого пользователя мы можем задавать отдельный набор тэгов, которые будут отображаться только ему. Кстати, отображать их удобно через jquery UI autocomplete multiple .

Также, когда мы передаем какой то набор сохраняемых тэгов для выбранного пользователя (опустим моменты разрезания, тримминг пробелов и т.д.), мы не хотим, чтобы повторялись одинаковые значения. Этого можно добиться, сделав следующее.

Сначала сделаем уникальный ключ из двух полей - tag_name и uid.

ALTER TABLE tags ADD unique index(tag_name,uid);

А затем мы можем добавлять несуществующие записи таким образом (обратите внимание на слово IGNORE - оно позволяет не показывать ошибку, когда создаются дубликаты уже существующих записей, а просто пропускать ее):

INSERT IGNORE INTO tags(tag_name, uid) VALUES ('my_tag1', 1), ('my_tag2', 1), ('мой тэг', 1)
sql