sqlite3触发器自动添加新月份记录

时间:2015-10-21 07:53:38

标签: triggers sqlite

如果新月不作为一行存在,我需要在由月号标识的统计表中自动插入一行。

'cards'是各个ID的运行计数,用于存储当前值(在翻转时重置),翻转计数以及该ID上所有事件的运行总计

'stats保持所有ID事件的运行计数,以及给定月份内发生的翻转次数。

CREATE TABLE IDS (ID_Num VARCHAR(30), Curr_Count INT, Rollover_Count INT, Total_Count INT);
CREATE TABLE stats(Month char(10), HitCount int, RolloverCount int);
CREATE TRIGGER update_Tstats BEFORE UPDATE OF Total_Count ON IDS
WHEN 0=(SELECT HitCount from stats WHERE Month = strftime('%m','now'))

(在WHEN子句的另一端尝试了“IS NULL”......仍然没有欢乐)

BEGIN
INSERT INTO stats (Month, HitCount, RolloverCount) VALUES (strftime('%m', 'now'),0,0);
END;

我确实让它工作到了一定程度,但是因为每次循环更新了翻转两次(值通过我在python脚本中的SQL查询上下变化),它在统计数据翻转计数中给了我两倍。所以现在我在我的脚本中运行一个双查询。但是,如果统计表中不存在当前月份数,则会全部失效。

我需要做的就是检查当前月份是否存在用于运行python脚本UPDATE查询的空白记录,如果不存在,则INSERT一个。脚本本身无法在初始启动时执行“运行一次”类型的查询,因为它可能会运行数天,包括跨越新的月份转换。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

要检查记录是否存在,请使用EXISTS:

CREATE TRIGGER ...
WHEN NOT EXISTS (SELECT 1 FROM stats WHERE Month = ...)
BEGIN
    INSERT INTO stats ...
END;