Cita: Lo explico con mi ejemplo: Tengo 1 tabla con datos de centros y otra con datos de citaciones. Lo que quiero hacer es que cada vez que se inserte o se actualice la tabla citaciones en la tabla centros se actualice un campo. Este campo contiene el número de citas que se han hecho a ese centro.
Allí puede convenirte un TRIGGER, pero la necesidad de ese campo en la otra tabla es absolutamente discutible.
Normalmente no se deben (por principio) almacenar
datos calculables, entendiendo por tales datos que pueden obtenerse al mismo tiempo que se realizan las consultas relacionadas con esos datos, o bien datos de agregación que tienen alguna variación el el tiempo.
No es una buena práctica porque obtener esos mismos datos en una forma actualizada lleva casi el mismo tiempo que leer esa tabla, con el agregado de que un campo de acumulador requiere procesos extra (como este y otros más) para resguardar su consistencia.Y esos procesos extra implican las mismas consultas que para obtener el dato dinamicamente... lo que hace que almacenarlo termine siendo innecesario.
¿Se comprende la idea?
Bueno. Un TRIGGER que haga lo que quieres sería mas o menos así:
Código MySQL:
Ver originalDELIMITER $$
UPDATE sugartest.citas_centros
SET num_ausencias
= (num_ausencias
+ new.ausencias
), num_citas_totales=(num_citas_totales+citas_totales),
num_asistencias=(num_asistencias+NEW.asistencias)
WHERE citas_centros.id
=NEW.id_centro
; DELIMITER;
Faltaría solamente una validación para saber si el id_centro entrante existe o no en sugartest.citas_centros, y en caso contrario realizar un INSERT, o bien hacer un INSERT ... ON DUPLICATE KEY UPDATE...