2014-11-06 6 views
0

Триггер, определенный ниже, не работает в sqlite3.триггер SQLite3 не работает

CREATE TRIGGER 'delete_expired' BEFORE INSERT ON 'visitor' BEGIN DELETE FROM visitor WHERE 'create_at' <= date('now', '-6 day'); END 

Но, это так ... Что-то может быть не так с условиями. Может ли кто-нибудь указать мне? Заранее благодарен

CREATE TRIGGER 'delete_expired' BEFORE INSERT ON 'visitor' BEGIN DELETE FROM visitor; END 
+0

Это условие означает удалить все записи, которые старше, чем за 6 дней в таблице посетителей –

+0

примечание стороны, это условие работает отлично, как следующее DELETE FROM посетитель WHERE «create_at» <= Дата («теперь», «- 6 дней); Однако он не размещается внутри триггера ... –

ответ

1

Если вам нужно указать имена таблиц и имена столбцов, используйте двойные кавычки, а не одинарные кавычки.

CREATE TRIGGER 'delete_expired' 
BEFORE INSERT ON visitor 
BEGIN DELETE FROM visitor WHERE create_at <= date('now', '-6 day'); 
END; 

Одиночные кавычки обычно обозначают буквальную строку.

sqlite> select 'create_at' from visitor; 
create_at 

В интерактивной сессии. , ,

sqlite> create table visitor (create_at timestamp); 
sqlite>  CREATE TRIGGER 'delete_expired' 
    ...>  BEFORE INSERT ON visitor 
    ...>  BEGIN DELETE FROM visitor WHERE create_at <= date('now', '-6 day'); 
    ...>  END; 
sqlite> insert into visitor values ('2014-01-01'); 
sqlite> select * from visitor; 
2014-01-01 
sqlite> insert into visitor values ('2014-11-06'); 
sqlite> select * from visitor; 
2014-11-06 
Смежные вопросы