MySql Table Insert si no existe de lo contrario actualizar

UPDATE AggregatedData SET datenum="734152.979166667", Timestamp="2010-01-14 23:30:00.000" WHERE datenum="734152.979166667"; 

Funciona si el datenum existe, pero quiero insertar estos datos como una nueva fila si el datenum no existe.

ACTUALIZAR

el datenum es único, pero esa no es la clave principal

Jai tiene razón en que deberías usar INSERT ... ON DUPLICATE KEY UPDATE .

Tenga en cuenta que no necesita incluir datenum en la cláusula de actualización ya que es la clave única, por lo que no debería cambiar. Necesita incluir todas las otras columnas de su tabla. Puede usar la función VALUES() para asegurarse de que se usan los valores adecuados al actualizar las otras columnas.

Aquí se reescribió su actualización utilizando la syntax correcta de INSERT ... ON DUPLICATE KEY UPDATE para MySQL:

 INSERT INTO AggregatedData (datenum,Timestamp) VALUES ("734152.979166667","2010-01-14 23:30:00.000") ON DUPLICATE KEY UPDATE Timestamp=VALUES(Timestamp) 

Intenta usar esto :

Si especifica ON DUPLICATE KEY UPDATE , y se inserta una fila que causaría un valor duplicado en un UNIQUE index or PRIMARY KEY , MySQL performs an [ UPDATE`] ( http://dev.mysql.com/doc/refman/5.7 /en/update.html ) de la fila anterior …

La cláusula ON DUPLICATE KEY UPDATE puede contener varias asignaciones de columna, separadas por comas.

Con ON DUPLICATE KEY UPDATE , el valor de las filas afectadas por fila es 1 si la fila se inserta como una nueva fila, 2 si se actualiza una fila existente y 0 si una fila existente se configura con sus valores actuales. Si especifica el indicador CLIENT_FOUND_ROWS para mysql_real_connect() cuando se conecta a mysqld , el valor de las filas afectadas es 1 (no 0) si una fila existente está configurada con sus valores actuales …

Tuve una situación en la que necesitaba actualizar o insertar en una tabla de acuerdo con dos campos (ambas claves externas) en las que no podía establecer una restricción ÚNICA (por lo que INSERTAR … EN ACTUALIZACIÓN DE LLAVE DUPLICADA no funcionará). Esto es lo que terminé usando:

 replace into last_recogs (id, hasher_id, hash_id, last_recog) select l.* from (select id, hasher_id, hash_id, [new_value] from last_recogs where hasher_id in (select id from hashers where name=[hasher_name]) and hash_id in (select id from hashes where name=[hash_name]) union select 0, m.id, h.id, [new_value] from hashers m cross join hashes h where m.name=[hasher_name] and h.name=[hash_name]) l limit 1; 

Este ejemplo está copiado de una de mis bases de datos, con los parámetros de entrada (dos nombres y un número) reemplazados por [hasher_name], [hash_name] y [new_value]. El SELECT nested … LIMIT 1 extrae el primero del registro existente o de un nuevo registro (last_recogs.id es una clave primaria de autoincrement) y lo utiliza como el valor ingresado en REPLACE INTO.