Estoy trabajando en la configuración de una base de datos SQLite simple para acceder a través de Python. Hasta ahora tengo una tabla básica y un par de factores desencadenantes: quiero tener una actualización de activación en una columna de campo 'fecha_añadir' cuando se agrega un nuevo registro, y otra para actualizar una columna 'fecha_actualizada' cuando se actualiza posteriormente un registro . Aquí está mi sintaxis SQLite para los disparadores:sqlite ¿ACTUALIZACIÓN dispara el disparo en las instrucciones INSERT también?
CREATE TRIGGER add_contact AFTER INSERT ON contact_info
BEGIN
UPDATE contact_info SET date_added = DATETIME('NOW') WHERE pkid = new.pkid;
END;
CREATE TRIGGER update_contact AFTER UPDATE ON contact_info
BEGIN
UPDATE contact_info SET date_updated = DATETIME('NOW') WHERE pkid = new.pkid;
END;
El disparador 'add_contact' parece estar funcionando bien ... se dispara cuando agrego un nuevo registro a través de un comando SQL de inserción, como estaba previsto.
El problema parece ser el desencadenante 'update_contact' ... se dispara tanto cuando actualiza un registro a través de un comando SQL UPDATE (como estaba previsto) y cuando agrego un nuevo récord también:
es decir, cuando agrego un nuevo récord consigo esto en las columnas 'DATE_ADDED' y '' date_updated:
2010-07-12 05:00:06|2010-07-12 05:00:06
y cuando puedo actualizar ese registro, cambia así:
2010-07-12 05:00:06|2010-07-12 05:14:26
Supongo que no entiendo por qué el disparador de ACTUALIZACIÓN también se activa en INSERTAR?
TIA,
Monte
Editado para agregar: ¿Alguna pista sobre cómo hacer que funcione como se pretende?
¡Vaya! Veo lo que quiere decir;) ¿Alguna idea de cómo lograr los objetivos originales de dos disparadores separados, uno que se activa en un INSERT y otro que se activa en ACTUALIZAR? Parece que si hubo una forma de activar el activador 'update_contact' en la actualización de cualquier campo * excepto * date_added, eso debería hacerlo. Simplemente no estoy seguro de cómo hacerlo ... – memilanuk
@memilanuk: ¿Podría comparar OLD.date_added con NEW.date_added en su activador UPDATE? – Borealid
Solo una actualización de un hilo antiguo, ya que hoy volví a jugar con el código en cuestión. Cambié el código de activación para leer: ACTUALIZACIÓN contact_info SET date_updated = DATETIME ('AHORA') WHERE pkid = new.pkid AND DATETIME ('NOW')! = Date_added; Parece que funciona. ¡Gracias por el empujón en la dirección correcta! – memilanuk