¿Reemplazar en tener una cláusula Where?

Estoy escribiendo una aplicación y estoy usando MySQL como DBMS, estamos descargando ofertas de propiedad y hubo algunos problemas de rendimiento. La architecture anterior se veía así: una propiedad se actualiza. Si el número de filas afectadas no es 1, entonces la actualización no se considera exitosa, de lo contrario, la consulta de actualización resuelve nuestro problema. Si la actualización no fue exitosa y el número de filas afectadas es más de 1, tenemos duplicados y los eliminamos todos. Después de eliminar duplicados si es necesario si la actualización no fue exitosa, ocurre una inserción. Esta architecture funcionaba bien, pero hubo algunos problemas de velocidad, ya que las propiedades se eliminan si no se actualizan durante 15 días. Teóricamente, el problema principal es eliminar propiedades, porque algunas propiedades están activas durante meses y los índices están muy alejados (estamos hablando de más de 500 propiedades).

Nuestro anfitrión me dijo que use reemplazar en lugar de eliminar propiedades y todas las propiedades en desuso deben considerarse como MUERTOS. He hecho esto, pero los problemas comenzaron a ocurrir debido a un error de syntax y no pude encontrar en ninguna parte un ejemplo de reemplazo con una cláusula where (me gustaría reemplazar una propiedad DEAD con la nueva propiedad en lugar de eliminar la anterior) propiedad e inserte una nueva para asegurar la optimización). Mi consulta se veía así:

replace into table_name(column1, ..., columnn) values(value1, ..., valuen) where ID = idValue 

Por supuesto, he calculado idValue y he manejado todo pero tuve un error de syntax. Me gustaría saber si estoy equivocado y hay una cláusula Where para reemplazar.

He encontrado una solución alternativa, que es incluso mejor que reemplazarla (usando simplemente una consulta de actualización) porque las suplantaciones están sucediendo detrás de las cortinas si utilizo reemplazarlas, pero me gustaría saber si estoy equivocado cuando digo eso. reemplazar en no tiene una cláusula where. Para obtener más información, consulte este enlace:

http://dev.mysql.com/doc/refman/5.0/en/replace.html

Gracias por sus respuestas de antemano, Lajos Árpád

Veo que ha resuelto su problema, pero para responder a su pregunta original:

REPLACE INTO no tiene una cláusula WHERE .

La syntax REPLACE INTO funciona exactamente como INSERT INTO excepto que las filas anteriores con la misma clave primaria o única se eliminan automáticamente antes de insertar la nueva fila.

Esto significa que en lugar de una cláusula WHERE , debe agregar la clave principal a los valores reemplazados para limitar su actualización.

 REPLACE INTO myTable ( myPrimaryKey, myColumn1, myColumn2 ) VALUES ( 100, 'value1', 'value2' ); 

… proporcionará el mismo resultado que …

 UPDATE myTable SET myColumn1 = 'value1', myColumn2 = 'value2' WHERE myPrimaryKey = 100; 

… o más exactamente:

 DELETE FROM myTable WHERE myPrimaryKey = 100; INSERT INTO myTable( myPrimaryKey, myColumn1, myColumn2 ) VALUES ( 100, 'value1', 'value2' ); 

En su enlace de documentación, muestran tres formas alternativas del comando de replace . Aunque elided, el único que puede aceptar una cláusula where es la tercera forma con la select final.

replace parece excesivo en relación con la update si entiendo su tarea correctamente.