2014-11-06 65 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

这个条件是指删除在访客表 – 2014-11-06 02:49:23

+0

旁注超过6天内的任何记录,这一条件正常工作像下面的DELETE FROM游客WHERE“create_at” <=日期(“现在”,“ - 6天');但是,它不会放在触发器中。 – 2014-11-06 02:51:42

回答

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