UPDATE AggregatedData SET datenum="734152.979166667",
Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667";
Funciona se datenum
existir, mas quero inserir esses dados como uma nova linha se datenum
não existir.
ATUALIZAR
o datenum é único, mas essa não é a chave primária
Respostas:
Jai está correto que você deve usar
INSERT ... ON DUPLICATE KEY UPDATE
.Observe que você não precisa incluir o datenum na cláusula de atualização, pois é a chave exclusiva, portanto, não deve ser alterado. Você precisa incluir todas as outras colunas de sua tabela. Você pode usar a
VALUES()
função para garantir que os valores adequados sejam usados ao atualizar as outras colunas.Aqui está sua atualização reescrita usando a
INSERT ... ON DUPLICATE KEY UPDATE
sintaxe apropriada para MySQL:fonte
UNIQUE
restriçãoTimestamp
usandoALTER TABLE AggregatedData ADD UNIQUE (Timestamp)
Tente usar este :
fonte
Tive uma situação em que precisei atualizar ou inserir em uma tabela de acordo com dois campos (ambas as chaves estrangeiras) em que não consegui definir uma restrição UNIQUE (então INSERT ... ON DUPLICATE KEY UPDATE não funcionou). Aqui está o que acabei usando:
Este exemplo foi extraído de um de meus bancos de dados, com os parâmetros de entrada (dois nomes e um número) substituídos por [hasher_name], [hash_name] e [new_value]. O SELECT ... LIMIT 1 aninhado puxa o primeiro do registro existente ou um novo registro (last_recogs.id é uma chave primária de incremento automático) e usa isso como o valor de entrada no REPLACE INTO.
fonte