Я работаю над созданием простой базы данных SQLite для доступа через Python. Пока у меня есть одна базовая таблица и несколько триггеров - я хочу, чтобы один триггер обновил полевой столбец «date_added» при добавлении новой записи, а другой - обновить столбец «date_updated», когда запись будет позже обновлена , Вот мой SQLite синтаксис для триггеров:sqlite UPDATE запуск триггера в операторах INSERT?
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;
«add_contact» триггер, кажется, работает нормально ... это срабатывает, когда я добавить новую запись с помощью команды SQL INSERT, как и планировалось.
Проблема, кажется, триггер «update_contact» ... он срабатывает как при обновлении записи с помощью команды SQL UPDATE (как планируется) и когда я добавить новую запись также:
т.е. когда я добавить новую запись, я получаю это в «DATE_ADDED» и «» date_updated столбцов:
2010-07-12 05:00:06|2010-07-12 05:00:06
и когда я обновить эту запись, она изменяется следующим образом:
2010-07-12 05:00:06|2010-07-12 05:14:26
Думаю, я не понимаю, почему триггер UPDATE срабатывает и на INSERT?
ТИА,
Monte
Edited добавить: Есть намеки на то, как заставить его работать как задумано?
Огонь! Я вижу, что вы имеете в виду;) Любая идея, как достичь первоначальных целей двух отдельных триггеров, срабатывающих в INSERT, и того, который срабатывает при UPDATE? Кажется, что если бы был активирован триггер update_contact при обновлении любого поля * кроме * date_added, это должно было бы сделать это. Просто не уверен, как это сделать ... – memilanuk
@memilanuk: Вы можете сравнить OLD.date_added с NEW.date_added в вашем триггере UPDATE? – Borealid
Просто обновление по старой теме, так как я общался с этим кодеком сегодня. Я изменил код запуска следующим образом: UPDATE contact_info SET date_updated = DATETIME ('NOW') WHERE pkid = new.pkid И DATETIME ('NOW')! = Date_added; Кажется, что нужно работать. Спасибо за толкание в правильном направлении! – memilanuk