W przypadku MySQL, jeśli mam pole, powiedzmy loginy, jak powinienem zaktualizować to pole o 1 w poleceniu sql?
Próbuję utworzyć zapytanie INSERT, które tworzy firstName, lastName i loginy. Jeśli jednak kombinacja firstName i lastName już istnieje, zwiększ loginy o 1.
więc stół może wyglądać tak ...
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Jestem po komendzie, która po uruchomieniu wstawiłaby nową osobę (np. Tom Rogers) lub zwiększyła loginy, gdyby użyta była nazwa John Jones.
INSERT
, nieUPDATE
. Jeśli chcesz zrobić wstawkę, musisz uzyskać maksimum i dodać do niej 1.Jeśli możesz bezpiecznie utworzyć (firstName, lastName) KLUCZ PODSTAWOWY lub przynajmniej umieścić na nich UNIKATOWY klucz, możesz to zrobić:
Jeśli nie możesz tego zrobić, musisz najpierw pobrać ten klucz podstawowy, więc nie sądzę, abyś mógł osiągnąć to, co chcesz w jednym zapytaniu.
źródło
ON DUPLICATE KEY UPDATE
replikacja nie jest całkowicie bezpieczna!Nie powiedziałeś, co próbujesz zrobić, ale dostatecznie dobrze to zasugerowałeś w komentarzach do drugiej odpowiedzi. Myślę, że prawdopodobnie szukasz kolumny z automatycznym zwiększaniem
wtedy na wkładce nie jest potrzebny żaden specjalny kod. Właśnie
Interfejs API MySQL ma funkcje, które informują, jaki identyfikator użytkownika został utworzony, gdy wykonujesz tę instrukcję w kodzie klienta.
źródło
Nie jestem ekspertem w MySQL, ale prawdopodobnie powinieneś spojrzeć na wyzwalacze, np. PRZED WSTAWIENIEM. W wyzwalaczu możesz uruchomić zapytanie wybierające na oryginalnej tabeli, a jeśli coś znalazło, po prostu zaktualizuj wiersz „logins” zamiast wstawiać nowe wartości. Ale wszystko to zależy od używanej wersji MySQL.
źródło
Jest to raczej przypis do wielu powyższych odpowiedzi, które sugerują użycie
ON DUPLICATE KEY UPDATE
, UWAŻAJ, że nie zawsze jest to bezpieczne replikacja, więc jeśli kiedykolwiek planujesz wyrosnąć poza pojedynczy serwer, będziesz chciał tego uniknąć i użyć dwóch zapytań , jeden, aby zweryfikować istnienie, a następnie drugi ,UPDATE
gdy istnieje wiersz lubINSERT
gdy go nie ma.źródło