UPDATE AggregatedData SET datenum="734152.979166667",
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
Działa, jeśli datenum
istnieje, ale chcę wstawić te dane jako nowy wiersz, jeśli datenum
nie istnieje.
AKTUALIZACJA
datenum jest unikalne, ale nie jest to klucz podstawowy
Odpowiedzi:
Jai ma rację, której powinieneś używać
INSERT ... ON DUPLICATE KEY UPDATE
.Zwróć uwagę, że nie musisz uwzględniać danych w klauzuli update, ponieważ jest to unikalny klucz, więc nie powinien się zmieniać. Musisz uwzględnić wszystkie inne kolumny z tabeli. Możesz użyć tej
VALUES()
funkcji, aby upewnić się, że podczas aktualizowania innych kolumn są używane prawidłowe wartości.Oto Twoja aktualizacja napisana ponownie przy użyciu poprawnej
INSERT ... ON DUPLICATE KEY UPDATE
składni MySQL:źródło
UNIQUE
ograniczenia zaTimestamp
pomocąALTER TABLE AggregatedData ADD UNIQUE (Timestamp)
Spróbuj użyć tego :
źródło
Miałem sytuację, w której musiałem zaktualizować lub wstawić do tabeli zgodnie z dwoma polami (oba klucze obce), na których nie mogłem ustawić UNIQUE ograniczenia (więc INSERT ... ON DUPLICATE KEY UPDATE nie zadziała). Oto, czego ostatecznie użyłem:
Ten przykład pochodzi z jednej z moich baz danych, a parametry wejściowe (dwie nazwy i liczba) zostały zastąpione przez [hasher_name], [hash_name] i [new_value]. Zagnieżdżony SELECT ... LIMIT 1 pobiera pierwszy z istniejącego rekordu lub nowy rekord (last_recogs.id jest kluczem podstawowym z funkcją autoinkrementacji) i używa go jako wartości wejściowej do REPLACE INTO.
źródło