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

В 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.

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

Оцени публикацию:
  • 12,56
Оценили человек: 12

Похожие статьи:

Справочники и учебники:


Комментарии посетителей:
  • а с какой версии поддерживается ON DUPLICATE KEY UPDATE ? ;-\
    31 января 2011, 15:25 коммент полезен : 0 # beerman
  • С версии MySQL 4.1.0
    31 января 2011, 15:27 коммент полезен : 0 # Admin
  • при этом надо помнить, что если INSERT проигнорирован (IGNORE), то mysql_insert_id() возвращает 0
    16 сентября 2011, 10:29 коммент полезен : 0 # Борода
  • Отличный сайт! Я тут многому научился. Спасибо разработчикам.
    27 февраля 2012, 19:10 коммент полезен : 0 # Дмитрий6
  • Маленькое дополнение. Если поиск производится не по PRIMARY KEY, ON DUPLICATE не сработает, необходимо в этом случае сначала искать, а потом изменять.
    26 января 2013, 12:12 коммент полезен : +1 # Денис2
    • все верно
      27 мая 2013, 13:13 коммент полезен : 0 # Да (гость)
Предложения и пожелания:
Ваше имя:
Ваш E-mail:
Сколько будет Οдин + Τри
Главная
X

Новые заметки:

Про что мы забываем когда делаем оценку задачи по времени

Список вопросов для собеседования разработчика по телефону

Symfony2 авторизация без Doctrine2 для чайника

Phpstorm7 LiveEdit

Жесткий хабр или не хабр, тогда кто?

Яндекс.Деньги мошенничество

Как узнать какие страницы в поиске яндекса или это секрет

Последние комменты:

Yapro CMS:

Здравствуйте, Гость | Войти | Регистрация | Карта сайта | RSS ленты | Ошибка в тексте? Выделите её мышкой и нажмите: Ctrl + Enter

youtube.com/watch?v=7hFivbgIEqk

При полном или частичном использовании материалов данного сайта, ссылка на сайт "yapro.ru" обязательна как на источник информации.
Автоматический импорт материалов и информации с сайта запрещен.
Copyrights © 2007 - 2018 YaPro.Ru

Главная » Веб-мастеру » MySQL »