..


Рекламные ссылки

Менее запросы с INSERT ... ON DUPLICATE KEY UPDATE

Статья, написанная Максом Босси

И "Хорошо известно, что правильное управление запроса является обязательным условием для стабильной и эффективной реализации.
В этой статье мы приведем малоизвестные, но очень мощный синтаксис, я говорю о ON DUPLICATE KEY UPDATE пункта.

Это положение используется при INSERT заявление и его целью является проверка, до ее введения, существует дублирование первичного ключа (первичный ключ) или уникальный ключ (уникальный ключ), а если это происходит двигателя un'UPDATE MySQL вместо этого вставить.

Преимущество этого пункта ясно: вы пишете один запрос вместо двух с преимуществами с точки зрения производительности и код очистки.

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

  • IP (ключ)
  • numero_visite
  • ultima_visita
Желая записывать все IP в пути на наших страницах мы, в соответствии с обычной логикой, не ВЫБЕРИТЕ первые предварительные убедитесь, что IP не является уже в БД и только если ответ отрицательный (IP нет) для запроса INSERT.

Благодаря синтаксис INSERT ... ON DUPLICATE KEY UPDATE ... мы можем достичь того же результата с помощью одного запроса:

 



 INSERT INTO VALUES ip_visitatori ('123 .123.123.123 ', 1, NOW ())

 





 ON KEY DPLICATE







 UPDATE numero_visite numero_visite = + 1, ultima_visita = NOW ();

 
Таким образом, если IP является включение сделан, иначе вы запустите простое обновление пострадавших записи. Используя этот синтаксис позволяет получать выгоду с точки зрения производительности на 30%.

С небольшим "воображение и изобретательность положение в вопросе не может быть очень полезным в различных обстоятельствах.
Например, мы можем использовать его в комбинации с условием. Вот пример: предположим, у вас есть таблица гипотетических интернет-аукционе структурирована следующим образом:

  • ID_asta
  • migliore_offerta
Предположим, вы хотите, чтобы приступить к размещению нового предложения, если аукцион уже предложила не будет простого обновления, но только если предложение выше, чем уже есть:
 



 Предложения INSERT INTO VALUES (1, 120)

 





 ON KEY DPLICATE







 UPDATE migliore_offerta = ЕСЛИ (VALUES (migliore_offerta) <120, 120, VALUES (migliore_offerta))

 
Благодаря простой запрос мы решили одним махом ... В противном случае нам бы пришлось использовать несколько запросов с последующей тратой ресурсов (и более высокий риск ошибок).

В той же категории ...
E-Learning
MS Access (хороший) MS Access (хороший)
Узнайте, как создавать и управлять базами данных быстро и легко. Начиная от 29 €.
MySQL (курс) MySQL (курс)
Управление с открытым исходным кодом базы данных. С 39 €.
SQL и базы данных (курс) SQL и базы данных (курс)
Создание и управление реляционными базами данных. С 39 €.
Рекламные ссылки