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