Обновление дублирующих при добавлении данных в MySQL

Здравствуйте, уважаемые посетители моего блога Курилка.co.ua. Работая над оптимизацией количества запросов к базе данных, я не перестаю удивляться широким возможностям MySQL. Простая задачка: в некую таблицу добавляются (INSERT) уникальные данные, в случае появления дубликата необходимо обновить (UPDATE) значение счетчика. Получается как минимум два запроса, но можно обойтись всего одним, используя в INSERT конструкцию ON DUPLICATE KEY UPDATE. Об этом подробней.

Для наглядности, приведу пример такой простой таблицы:

CREATE TABLE table (
a int(11) NOT NULL default '0',
b int(11) NOT NULL default '0',
c int(11) NOT NULL default '0',
UNIQUE KEY (a)
);

Если в INSERT вы указываете ON DUPLICATE KEY UPDATE (новшество в MySQL 4.1.0), то вставка дублирующего первичного (PRIMARY) или уникального (UNIQUE) ключа, приведет к выполнению UPDATE старой строки. Например:

INSERT INTO table SET a=1,b=2,c=1 ON DUPLICATE KEY UPDATE c=c+1

Если в таблице содержится строка, значение поля a которой равно единице, то выше указанный запрос будет аналогичен следующему:

UPDATE table SET c=c+1 WHERE a=1

В случае наличие нескольких уникальных (UNIQUE) ключей, например a и b, они будут объединены через OR. Причем обновляться будет только первое совпадение. Другими словами, мы получим следующий аналог:

UPDATE table SET c=c+1 WHERE a=1 OR b=2 LIMIT 1

Если необходимо объединение через AND, достаточно определить два поля как один уникальный ключ, т.е.:

UNIQUE KEY d (a,b)

Ну, вот и всё. Надеюсь, мне удалось объяснить всё более-менее понятно и доступно. Уточню лишь, что такая конструкция считается не слишком надежной, но у меня вроде работает. Смотрите сами и если есть вопросы, уточнения, поправки и т.п. – пишите, будем разбираться. Спасибо за внимание.