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_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, если их не существует и обновить в противном случае
Наверняка Вы часто использовали конструкцию типа:
$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)
Cool
ОтветитьУдалить