Część systemu, nad którym obecnie pracuję, wymaga zalogowania się w mysql, z licznymi aktualizacjami.Funkcja MySQL do wstawiania rekordów, jeśli aktualizacja się nie powiedzie?
włożeniu danych jest w formacie:
date | name | count |
-----------+------+-------+
2009-01-12 | alan | 5 |
2009-01-12 | dave | 2 |
2009-01-12 | mary | 1 |
Dane te są regularnie analizowane z płaskiego pliku, podsumowana jak powyżej, w ramach przygotowań do wkładki dB/aktualizacji - unikalny klucz w bazie danych jest (date, name)
para.
Poprzednio ten system sprawdzałby istniejącą tabelę dla dowolnych rekordów dla danej pary date
i name
przed podjęciem decyzji o aktualizacji lub wstawieniu.
Problemem, który mamy, jest to, że wraz ze wzrostem tej tabeli czas reakcji nie poprawia się, a my chcemy maksymalnie ograniczyć liczbę zapytań.
System został niedawno zaktualizowany do uruchomienia INSERT ... ON DUPLICATE KEY UPDATE
zapytania, który ma zmniejszoną liczbę select
s nieznacznie, ale nasza wspólna sprawa pewnej odległości jest update
.
Zastanawiam się, czy ktoś wie o funkcji mysql, która jest zasadniczo INSERT ... ON DUPLICATE KEY UPDATE
w odwrotnej kolejności, to znaczy będzie próbować zaktualizować wiersz, jeśli żaden nie pasuje, a następnie wykonać wkładkę?
Edit
nie sprawiają, że zbyt jasne powyżej, co chciałbym zrobić, gdy mam rekord ('2009-01-12','alan','5')
jest na przykład:
UPDATE table SET count = count+5 WHERE date = '2009-01-12' and name = 'alan';
a jeśli powyżej nie powiedzie się, wstaw powyższe dane. Konieczność zwiększenia licznika powoduje, że REPLACE
nie będzie działać. Wymienić wykonuje usuwania & wkładkę i nie pozwalają zapoznać się z rzędu przed usunięciem więc count = count + 5
nie zwiększamy wartość poprzednią count
przez 5.
@jasoncohen - The INSERT ... ON DUPLICATE KEY UPDATE
ma wykonać zadanie, ale jestem pytam, czy jest na to bardziej optymalny sposób.
Przepraszamy za wszelkie zamieszanie wynikające ze złego oryginalnego frazowania!
Ma sens, pytał więcej w nadziei niż oczekiwanie, że jest jakaś magiczna, super-wydajna kwerenda mysql do tego! – ConroyP
Przykład użycia byłby miły. –
@HelgaIliashenko z prośbą, aby najpierw zapytać o przykład użycia, zanim pójdzie w dół, byłoby miło –