MySQL: INSERT … ON DUPLICATE KEY UPDATE или как вставить строку если она не существует и обновить в противном случае

минута на чтение

Добрый день, уважаемые программисты! Наверняка, каждый из вас сталкивался с проблемой вставки данных в БД, если строки не существует и обновление ее, если таковая уже есть.

Как вставить данные в базу данных MySQL, если их не существует и обновить в противном случае

Наверняка Вы часто использовали конструкцию типа:

$result = mysql_query("SELECT `uid`, `text` FROM `t_userinfo` WHERE `uid`='".$uid."'");

if (mysql_num_rows($result)>0) { // Если строка имеется, то обновляем
    mysql_query("UPDATE `t_userinfo` SET `text`='".$newtext."' WHERE `uid`='".$uid."'");
} else { // Если строки нет, то добавляем новое значение в БД
    mysql_query("INSERT INTO `t_userinfo` SET `text`='".$newtext."',`uid`='".$uid."'");
}

Немного муторно, не правда ли? И производительность немного страдает, все таки столько действий.

Допустим, что эта таблица имеет PRIMARY KEY или UNIQUE, в данном случае это поле uid. То есть таблица должна иметь уникальный ключ.

Вставить или обновить данные в базе данных MySQL одним запросом

И все вышеперечисленные действия можно легко заменить:

mysql_query("INSERT INTO `t_userinfo` SET `text`='".$newtext."',`uid`='".$uid."' ON DUPLICATE KEY UPDATE `text`='".$newtext."'");

Сам MySQL код:

INSERT INTO `t_userinfo` SET `text`='some_text',`uid`='some_uid' ON DUPLICATE KEY UPDATE `text`='some_text';

Пожалуйста пользуйтесь, если строка существует то просто обновить, а если нет — то вставить новое значение (insert, update)

Внимание! В данной статье мы опускаем вопрос безопасности запросов. Здесь не указаны простые механизмы от SQL-инъекций.

Facebook Vk Ok Twitter Telegram

Похожие записи:

Как экспортировать одну таблицу из базы данных MySQL, используя mysqldump Для экспорта всего одной таблицы базы данных MySQL, существует довольно простая утилита mysqldump. Синтаксис довольно прост: mysqldump --user=[имя пользователя] --host=[имя хоста или...
Добрый день, друзья! Например, Вам необходимо узнать, существует ли функция, чтобы выполнить ее. Проверить на существование функцию js, можно простым способом: if(typeof myFunc == 'function') { // Функция myFunc существует // Вызываем функцию ...
Здравствуйте, друзья! Нужно увеличить максимально возможный размер SQL-файла при его выполнении на сервере? Все просто, вам нужно изменить файл: my.cnf Откройте его:  nano /etc/mysql/my.cnf Найдите там [mysqld] на следующей строке добавьте: max_allowed_pac...