..


Linki sponsorowane

Mniej zapytań INSERT ... ON DUPLICATE KEY UPDATE

Artykuł napisany przez Max Bossi

I "Powszechnie wiadomo, że prawidłowe zarządzanie zapytanie jest warunkiem realizacji stabilne i wydajne.
W tym artykule zaprezentujemy mało znany, ale bardzo silny składni, mówię ON DUPLICATE KEY klauzuli UPDATE.

Klauzula ta jest używana podczas INSERT i jego celem jest sprawdzenie, przed wprowadzeniem, jest powielanie klucz podstawowy (klucz podstawowy) lub unikalny klucz (KEY), a jeśli tak się stanie, silnik un'UPDATE MySQL zamiast wstawić.

Zaletą tej klauzuli jest jasne: możesz napisać jedno zapytanie zamiast dwóch z korzyści w zakresie wydajności i czyszczenia kodu.

Weźmy przykład. Załóżmy, że chcemy zrobić prosty skrypt, który wykonuje logowanie odwiedzających naszą witrynę. Poniżej struktura tabeli z naszych DB:

  • IP (key)
  • numero_visite
  • ultima_visita
Chcąc nagrywać każdy IP w tranzycie na naszych stronach mamy, zgodnie ze zwykłą logiką, zrobić SELECT pierwsze, wstępne sprawdzenie, czy IP nie jest już w DB i tylko wtedy, gdy odpowiedź jest negatywna (nie IP obecnie) do zapytania INSERT.

Dzięki INSERT składni ... ON DUPLICATE KEY UPDATE ... możemy osiągnąć ten sam efekt za pomocą jednego zapytania:

 



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

 





 KLUCZOWYCH DPLICATE







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

 
Tak więc, jeśli IP jest włączenie się, w przeciwnym razie uruchomić prosty aktualizacja dotyczy rekordu. Korzystanie z tej składni pozwala na uzyskanie korzyści w zakresie wydajności równej 30%.

Przy odrobinie wyobraźni i pomysłowości klauzuli pytanie może być bardzo przydatne w różnych okolicznościach.
Na przykład możemy go używać w połączeniu z warunkiem. Oto przykład: Załóżmy, że masz tabelę hipotetycznej stronie aukcji internetowej następującą strukturę:

  • ID_asta
  • migliore_offerta
Załóżmy, że chcesz przystąpić do umieszczenia nowej oferty, jeśli aukcja jest już oferowana będzie w formie zwykłej aktualizacji, ale tylko wtedy, gdy oferta jest wyższa niż już istnieje:
 



 Oferty INSERT INTO VALUES (1, 120)

 





 KLUCZOWYCH DPLICATE







 UPDATE migliore_offerta = JEŻELI (VALUES (migliore_offerta) <120, 120, VALUES (migliore_offerta))

 
Poprzez proste zapytanie rozwiązaliśmy za jednym zamachem ... W przeciwnym razie mielibyśmy do korzystania z kilku zapytań z konsekwencją marnotrawstwo zasobów (i większe ryzyko błędów).

W tej samej kategorii ...
E-Learning
MS Access (zaawansowane) MS Access (zaawansowane)
Dowiedz się, jak tworzyć i zarządzać bazami danych szybko i łatwo. Począwszy od 29 €.
MySQL (Kurs) MySQL (Kurs)
Zarządzanie bazą danych open-source. Od 39 €.
SQL i bazy danych (pole) SQL i bazy danych (pole)
Tworzenie i zarządzanie relacyjnymi bazami danych. Od 39 €.
Linki sponsorowane