Quiero hacer un seguimiento del historial de cambios para un usuario, de modo que cada vez que cambie su perfil, necesito tomar los datos antiguos y almacenarlos en el historial y actualizarlos con datos nuevos.
Puedo usar un select
para obtener los datos antiguos, un insert
historial y finalmente un update
cambio de datos.
¿Puedo tener todo esto en una sola consulta en MySQL sin utilizar procedimientos almacenados, disparadores, etc. como el uso de bloqueos, etc. Si es así, dame una pequeña muestra.
Respuestas:
Para hacer esto sin el riesgo de bloqueo de otro usuario intenta actualizar el mismo perfil, al mismo tiempo, es necesario bloquear la fila en
t1
primer lugar, a continuación, utilizar una transacción (como señala Rolando en los comentarios a su pregunta):fuente
No creo que haya una manera de combinar las tres declaraciones. Lo más parecido a eso realmente no te ayuda, y eso es un SET SELECT. Tu mejor apuesta es un disparador. A continuación se muestra una muestra de un desencadenante que utilizo a menudo para mantener tal seguimiento de auditoría (construido con PHP):
fuente
He descubierto que esta consulta funciona en servidores SQL y MySQL
INSERT INTO t2 SELECT * FROM t1 WHERE id=10; UPDATE t1 SET id=11 WHERE id=10;
Espero que esto sea útil para alguien más también en el futuro.
fuente