Встроенный функционал MySQL

В MySQL есть достаточное количество встроенных функций и фич, которые упрощают код. К сожалению, не все программисты знают об этом и используют свои «велосипеды».

ON DUPLICATE KEY UPDATE


Например, есть таблица с какими-то объектами (пользователи, посты и т.д.). Если данный объект с таким-тоуникальным свойством уже существует, то апдейтим какое-то свойство у него. Если объекта не существует, то вставляем новую строку. Часто можно встретить такой код:

// находим объект $row = query('SELECT * FROM table WHERE id=1'); // проверяем есть ли такой объект if ($row) { // делаем апдейт query('UPDATE table SET column=column+1 WHERE id=1'); } else { // делаем вставку query('INSERT INTO table SET column=1, id=1'); }

Подобную конструкцию можно заменить одним запросом без участия php, при условии наличия первичного или уникального ключа по полю id:

INSERT INTO table SET column = 1, id=1 ON DUPLICATE KEY UPDATE column = column + 1

INSERT IGNORE


Зачастую при добавление в таблицу, имеющей UNIQUE индекс или PRIMARY KEY, новой строки, очень полезным бывает синтаксис INSERT IGNORE. Использование данного синтаксиса удобно в случае случайного дублирования ключа при вставке, то есть сама вставка не будет произведена, при этом не будет прекращено выполнение.
Обычный алгоритм:
1) проверить наличие строки в таблице по ключу (SELECT)
2) вставить строку в случае отсутствия дублирования ключа (INSERT)

// находим объект<br>$row = query('SELECT * FROM table WHERE id=1'); // если такого объекта нет, то вставляем новую запись if (!$row) { query('INSERT INTO table …'); }
Теперь напишем только один запрос INSERT IGNORE без участия php
query('INSERT IGNORE INTO table …') // вставка