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

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

[code lang=»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;
[/code]

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

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

Сначала сделаем уникальный ключ из двух полей — tag_name и uid.
[code lang=»sql»]
ALTER TABLE tags ADD unique index(tag_name,uid);

[/code]

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

[code lang=»sql»]
INSERT IGNORE INTO tags(tag_name, uid) VALUES (‘my_tag1’, 1), (‘my_tag2’, 1), (‘мой тэг’, 1)

[/code]