sqlite UPDATE вызывает срабатывание операторов INSERT также? - PullRequest
6 голосов
/ 12 июля 2010

Я работаю над настройкой простой базы данных SQLite для доступа через Python. Пока у меня есть одна базовая таблица и пара триггеров - я хочу, чтобы один триггер обновлял столбец поля date_added при добавлении новой записи, а другой - для обновления столбца date_updated при последующем обновлении записи , Вот мой синтаксис SQLite для триггеров:

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

Отредактировано, чтобы добавить: Есть ли подсказки о том, как заставить его работать как задумано?

Ответы [ 2 ]

8 голосов
/ 08 июня 2012

Лучший способ избежать исходной проблемы - использовать DEFAULT ( DATETIME('NOW') ) предложение для столбца date_added в определении таблицы вместо использования триггера INSERT.

6 голосов
/ 12 июля 2010

У вас есть ОБНОВЛЕНИЕ в вашем триггере INSERT. Таким образом, ВСТАВКА вызывает ОБНОВЛЕНИЕ. Который вы зацепили другим триггером.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...