需求: 數據庫中表t_VerifyCsmDetail需要最多保存10W條記錄,超出時刪除最舊的那一條。
思路:設置插入觸發器。插入前先判斷表中記錄總數,如果大於99999條,則刪除最舊的一條記錄。
代碼如下:
create trigger VRF_insert before insert on t_VerifyCsmDetail for each row when((select COUNT(*) fromt_VerifyCsmDetail)>99999) begin delete from t_VerifyCsmDetail where LocalNO=(select MIN(LocalNO) from t_VerifyCsmDetail); end
其中,VRF_insert是觸發器名;before表示在插入之前判斷;for each row 可省略,具體含義請百度;
when((select COUNT(*) from t_VerifyCsmDetail)>1)表示當總記錄數大於99999條時觸發刪除記錄操作;
語句delete from t_VerifyCsmDetail where LocalNO=(select MIN(LocalNO)from t_VerifyCsmDetail);中,
t_VerifyCsmDetail是表名,LocalNO為其中一個字段的字段名(在我的表中被設置為自增主鍵類型為int),
select MIN(LocalNO) from t_VerifyCsmDetail表示在表中字段LocalNO的最小值,
delete from t_VerifyCsmDetail whereLocalNO=xx;表示刪除此條記錄。
注意:如果在begin和end之間有多條SQL語句,則每條語句必須用分號隔開;end后面無需分號。
另外,一定要確保sqlite3已經被完整的移植到linux下。
我之所以剛剛開始觸發器設置不成功,就是因為sqlite3靜態庫libsqlite3.so.0和執行sqlite3 的命令文件未放置在/lib和/bin下。