Ich arbeite an der Einrichtung einer einfachen SQLite-Datenbank für den Zugriff über Python. Bis jetzt habe ich eine Basistabelle und ein paar Auslöser - ich möchte einen Auslöser eine Feldspalte 'date_added' aktualisieren, wenn ein neuer Datensatz hinzugefügt wird, und einen anderen, um eine Spalte 'date_updated' zu aktualisieren, wenn ein Datensatz später aktualisiert wird . Hier ist meine SQLite Syntax für die Trigger:sqlite UPDATE Trigger Feuern auf INSERT-Anweisungen auch?
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;
Der ‚add_contact‘ Trigger scheint zu funktionieren ... es feuert, wenn ich einen neuen Datensatz über einen SQL-Befehl INSERT hinzufügen, wie geplant.
Das Problem scheint die ‚update_contact‘ Trigger zu sein ... es feuert beide, wenn ich einen Datensatz über einen SQL-Befehl UPDATE aktualisieren (wie geplant) und, wenn ich einen neuen Datensatz hinzufügen auch:
dh wenn ich einen neuen Datensatz hinzufügen bekomme ich diese in den ‚DATE_ADDED‘ und ‚date_updated‘ Spalten:
2010-07-12 05:00:06|2010-07-12 05:00:06
und wenn ich diesen Rekord aktualisieren, es ändert sich wie folgt:
2010-07-12 05:00:06|2010-07-12 05:14:26
Ich denke, ich verstehe nicht, warum der UPDATE-Trigger auch bei INSERT ausgelöst wird.
TIA,
Monte
Edited hinzufügen: Irgendwelche Hinweise, wie sie wie beabsichtigt funktioniert?
Whoops! Ich sehe, was du meinst;) Irgendeine Idee, wie man die ursprünglichen Ziele von zwei verschiedenen Auslösern erreicht, einer, der auf einem INSERT feuert, und einem, der auf UPDATE feuert? Scheint so, als ob es eine Möglichkeit gäbe, den Auslöser 'update_contact' bei der Aktualisierung eines Feldes auszulösen * außer * date_added, das sollte es tun. Nur nicht sicher, wie es geht ... – memilanuk
@memilanuk: Sie könnten OLD.date_added mit NEW.date_added in Ihrem UPDATE-Trigger vergleichen? – Borealid
Nur ein Update auf einen alten Thread, als ich heute wieder mit dem fraglichen Code herumgebastelt habe. Ich änderte den Auslösercode zu lesen: UPDATE contact_info SET date_updated = DATETIME ('JETZT') WHERE pkid = new.pkid UND DATETIME ('NOW')! = Date_added; Scheint zu arbeiten. Danke für den Anstoss in die richtige Richtung! – memilanuk