2014-01-20 134 views
3

我在SQLite數據庫中擁有表「日誌」,其中我寫了所有的日誌文件。當插入新記錄時爲SQLite創建觸發器以刪除舊記錄

但是我想從獲取到大假裝數據庫 - 和最聰明的方式這樣做,是通過使用INSERT命令觸發 - 至少我是這麼認爲的......

當一個新紀錄被插入時,觸發器將被觸發,刪除超過10天的所有記錄。

或者......

當一個新的記錄被插入,觸發器應被解僱,這刪除所有的舊記錄,其中超過規定量(例如1000)。

我需要一個示例代碼。

親切的問候,和thx。

回答

5

這將創建一個插入觸發器,它將刪除創建日期超過10天的任何東西。

CREATE TRIGGER [TRIGGER_NAME] AFTER INSERT ON my_table 
BEGIN 
    DELETE FROM LOG WHERE DATE(CREATE_DATE) > DATE('now', '-10 days'); 
END 

如果你想根據大小來做一些事情,就像你說1000行那樣,你可以做這樣的事情。

CREATE TRIGGER [TRIGGER_NAME] AFTER INSERT ON my_table 
BEGIN 
    DELETE FROM LOG WHERE ROW_NO NOT IN 
     (SELECT TOP 1000 ROW_NO FROM LOG ORDER BY CREATE_DATE DESC); 
END 

這將選擇1000個最新的行並刪除不在該select語句中的任何內容。

+0

我添加了第二個例子,如果你想保持表特定的大小。 –