MySQL для ленивых и практичных

Автор: Aport Пятница, Январь 23rd, 2015 Нет комментариев

Рубрика: Разное

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

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

ON DUPLICATE KEY UPDATE

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

// находим объект
$row = query(‘SELECT * FROM table WHERE’);

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

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

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

INSERT INTO table_name SET unsubscribe = 1, time_unsubscribe = ’1299012638′ ON DUPLICATE KEY UPDATE unsubscribe = 1, time_unsubscribe = ’1299012638′


INSERT IGNORE

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

Обычный алгоритм:

1) проверить наличие строки в таблице по ключу (SELECT)
2) вставить строку в случае отсутствия дублирования ключа (INSERT)

// находим объект
$row = query(‘SELECT * FROM table WHERE’);
// если такого объекта нет, то вставляем новую запись
if (!$row) {
query(‘INSERT INTO table …’);
}

Теперь напишем только один запрос INSERT IGNORE без участия php

query(‘INSERT IGNORE INTO table …’) // вставка

Не нужно придумывать свои алгоритмы и писать лишний код – пусть за вас думает MySQL.

 

Источник: yapro.ru

Оставить комментарий

Чтобы оставлять комментарии Вы должны быть авторизованы.

Похожие посты