UPDATE AggregatedData SET datenum="734152.979166667",
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
Он работает, если он datenum
существует, но я хочу вставить эти данные как новую строку, если datenum
он не существует.
ОБНОВИТЬ
datenum уникален, но это не первичный ключ
Ответы:
Джай прав, что вы должны использовать
INSERT ... ON DUPLICATE KEY UPDATE
.Обратите внимание, что вам не нужно включать datenum в предложение обновления, поскольку это уникальный ключ, поэтому он не должен меняться. Вам необходимо включить все остальные столбцы из вашей таблицы. Вы можете использовать эту
VALUES()
функцию, чтобы убедиться, что при обновлении других столбцов используются правильные значения.Вот ваше обновление, переписанное с использованием правильного
INSERT ... ON DUPLICATE KEY UPDATE
синтаксиса MySQL:источник
UNIQUE
ограничениеTimestamp
с помощьюALTER TABLE AggregatedData ADD UNIQUE (Timestamp)
Попробуйте использовать это :
источник
У меня была ситуация, когда мне нужно было обновить или вставить в таблицу в соответствии с двумя полями (оба внешних ключа), для которых я не мог установить ограничение UNIQUE (поэтому INSERT ... ON DUPLICATE KEY UPDATE не сработает). Вот что я в итоге использовал:
Этот пример взят из одной из моих баз данных, при этом входные параметры (два имени и номер) заменены на [hasher_name], [hash_name] и [new_value]. Вложенный SELECT ... LIMIT 1 извлекает первую из существующей записи или новой записи (last_recogs.id - это первичный ключ с автоинкрементом) и использует это как значение, вводимое в REPLACE INTO.
источник