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

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

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

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


Комментарии посетителей:
  • а с какой версии поддерживается 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:
Введите изображенные цифры:
Captcha
Главная
X

youtube.com/watch?v=7hFivbgIEqk

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

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