Wenn ich mit MySQL ein Feld habe, beispielsweise Anmeldungen, wie würde ich dieses Feld innerhalb eines SQL-Befehls um 1 aktualisieren?
Ich versuche, eine INSERT-Abfrage zu erstellen, die Vorname, Nachname und Anmeldungen erstellt. Wenn die Kombination aus Vorname und Nachname jedoch bereits vorhanden ist, erhöhen Sie die Anmeldungen um 1.
so könnte die Tabelle so aussehen ..
firstName----|----lastName----|----logins
John Jones 1
Steve Smith 3
Ich bin nach einem Befehl, der beim Ausführen entweder eine neue Person (z. B. Tom Rogers) einfügt oder die Anmeldungen erhöht, wenn John Jones der verwendete Name ist.
INSERT
, keinUPDATE
. Wenn Sie eine Einfügung vornehmen möchten, müssen Sie das Maximum ermitteln und 1 hinzufügen.Wenn Sie sicher (Vorname, Nachname) zum PRIMÄREN SCHLÜSSEL machen oder zumindest einen EINZIGARTIGEN Schlüssel darauf setzen können, können Sie dies tun:
Wenn Sie das nicht können, müssen Sie zuerst den Primärschlüssel abrufen, sodass Sie nicht in einer Abfrage das erreichen können, was Sie wollen.
quelle
ON DUPLICATE KEY UPDATE
nicht vollständig replikationssicher ist!Sie haben nicht gesagt, was Sie versuchen, aber Sie haben es in den Kommentaren zur anderen Antwort gut genug angedeutet. Ich denke, Sie suchen wahrscheinlich nach einer Spalte für die automatische Inkrementierung
dann wird beim Einfügen kein spezieller Code benötigt. Gerade
Die MySQL-API verfügt über Funktionen, die Ihnen mitteilen, welche Benutzer-ID erstellt wurde, als Sie diese Anweisung im Client-Code ausführen.
quelle
Ich bin kein Experte für MySQL, aber Sie sollten sich wahrscheinlich Trigger ansehen, z. B. VOR EINFÜGEN. Im Trigger können Sie eine Auswahlabfrage für Ihre ursprüngliche Tabelle ausführen. Wenn etwas gefunden wurde, aktualisieren Sie einfach die Zeile 'logins', anstatt neue Werte einzufügen. Dies hängt jedoch von der Version von MySQL ab, die Sie ausführen.
quelle
Dies ist eher eine Fußnote zu einer Reihe der obigen Antworten, die die Verwendung von BEWARE vorschlagen
ON DUPLICATE KEY UPDATE
. Beachten Sie, dass dies NICHT immer replikationssicher ist. Wenn Sie also jemals vorhaben , über einen einzelnen Server hinauszuwachsen, sollten Sie dies vermeiden und zwei Abfragen verwenden , eine, um die Existenz zu überprüfen, und eine zweite, um entwederUPDATE
eine Zeile zu existieren oderINSERT
nicht.quelle