Parte del sistema en el que estoy trabajando en este momento implica un registro en mysql, con recuentos que se actualizan con frecuencia.Función MySQL para insertar el registro si falla la actualización?
se insertan los datos son del formato:
date | name | count |
-----------+------+-------+
2009-01-12 | alan | 5 |
2009-01-12 | dave | 2 |
2009-01-12 | mary | 1 |
Estos datos se analiza regularmente desde un archivo plano, que se resumen como anteriormente en la preparación de una base de datos de inserción/actualización - la clave única en la base de datos es el (date, name)
par.
Anteriormente, este sistema verificaría la tabla existente para cualquier registro para un par dado date
y name
antes de decidirse por una actualización o inserción.
El problema que tenemos es que, a medida que crece esta tabla, el tiempo de respuesta no mejora, y queremos reducir el número de consultas tanto como sea posible.
El sistema se ha actualizado recientemente para ejecutar una consulta INSERT ... ON DUPLICATE KEY UPDATE
, lo que ha reducido el número de select
s marginalmente, pero nuestro caso común por una cierta distancia es la update
.
Me pregunto si alguien sabe de una función mysql que es esencialmente INSERT ... ON DUPLICATE KEY UPDATE
en reversa, es decir, intentará actualizar una fila, si ninguna coincide, entonces realice la inserción?
Editar
no hice demasiado claro por encima, lo que me gustaría hacer cuando tengo el registro ('2009-01-12','alan','5')
por ejemplo, es:
UPDATE table SET count = count+5 WHERE date = '2009-01-12' and name = 'alan';
y si el arriba falla, inserte los datos anteriores. La necesidad de incrementar un contador es la razón por la cual REPLACE
no funcionará. Reemplazar realiza una & inserción de eliminación, y no permite que se refieren a la fila que se está eliminado, por lo que no habría count = count + 5
incrementar el valor anterior por count
5.
@jasoncohen - la INSERT ... ON DUPLICATE KEY UPDATE
hace el trabajo, pero yo' Estoy preguntando si hay una manera más óptima de hacer esto.
¡Perdón por cualquier confusión que resulte del pobre fraseo original!
¡Tiene sentido, estaba pidiendo más con esperanza que con la expectativa de que hubiera alguna consulta mágica y de super-rendimiento para esto! – ConroyP
Un ejemplo de uso sería bueno. –
@HelgaIliashenko solicitando primero preguntar por un ejemplo de uso antes de la votación negativa sería bueno –