2017-09-25 63 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