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

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

Как вставить данные в базу данных 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)

mysql, php, insert. update, on duplicate key update, уникальный ключ, вставить, обновить


Комментарии

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

Популярные сообщения из этого блога

Как преобразовать строку в массив в ClickHouse / How to transform string to array in ClickHouse

Как разложить массив на несколько строк в ClickHouse

Экспорт одной таблицы базы данных или mysqldump одной таблицы (MySQL)