2017-09-25 62 views
0

我在我的Rails项目上使用sqlite3,我需要创建一个触发器,当另一个引用表更新时自动插入到表中。 例如,我有2个表分解总计,每个表的模式如下。下面 击穿与UPSERT sqlite3触发器

Date TEXT NOT NULL, 
Amount DECIMAL NOT NULL 

Date TEXT NOT NULL, 
Daily_Total DECIMAL NOT NULL, 
FOREIGN KEY (Date) REFERENCES Breakdown(Date) 

然后,就是我创建触发器。

 CREATE TRIGGER update_sum AFTER INSERT ON Breakdown 
    ...> BEGIN 
    ...> INSERT OR REPLACE INTO Total (Date, Daily_Total) 
    ...> VALUES (Breakdown.Date, 
    ...> (SELECT SUM(Amount) FROM Breakdown WHERE Date = Total.Date)); 
    ...> END; 

所以,我的想法是,当我插入击穿表作为**INSERT INTO Breakdown VALUES (Date('now'),19.99);**然后表被通过任何插入或更新而更新。

然而,当我插入分解表,我得到一个错误说错误:没有这样的列:Breakdown.Date

谁能告诉我的地步,我做错了吗?

谢谢!

回答

0

可以访问导致触发器触发行的值,而是“表” is called NEW

INSERT ... VALUES(NEW.Date, (SELECT SUM... WHERE Date = NEW.Date)); 
+0

太谢谢你了!那正是我想要的!但是,我可以获得更多的解释或文档,以了解为什么我们使用NEW而不是实际的表名称? – Terrence