将值从一个表复制到另一个表与规范化相反,因为您已经可以通过原始表轻松获得该值。
但是,您可能有多个moneyincome 行,并且您希望availablecash 反映可用的总金额。
例如
在 moneyincome 表中,您可能有以下内容:-
- 1 40.00 2018-01-01
- 2 50.00 2018-01-02
- 3 25.00 2018-01-03
并且想要余额 aka availablecash 是 115.00。
您不需要另一个表,您可以通过查询来确定这一点(无论如何,您都必须查询另一个表才能获得商店余额)例如
SELECT sum(money) AS availablecash FROM moneyincome;
但是,如果你想要一个 TRIGGER;考虑到您的要求似乎是矛盾的,(您想用该表中的唯一值替换),以下将创建一个 TRIGGER,当有新行时,它将在 availablecash 表中插入一个新条目被插入到 moneyincome 表中:-
CREATE TRIGGER IF NOT EXISTS myavailablecashtrigger
AFTER INSERT ON moneyincome
BEGIN
INSERT INTO availablecash VALUES(new.code,new.money);
END;
- myavailablecashtrigger 是触发器的名称
基于以上 3 行插入 moneyincome 表的结果将是 availablecash 表将是:-
- 注意!我意识到这可能不是您想要解释的,但我无法真正理解您想要什么。也许您应该展示您想要提供的示例(之前和之后)。我也相信你的设计/结构很可能不适合你想要的。
附加
根据您更新的要求,您实际上需要两个触发器(除非您最初在 availablecash 表中创建了第一行)。如果不存在则插入新行,然后插入正常的行来更新行。
这里有两个触发器:-
-- Normal Trigger (when row already exists in the availablecash table)
CREATE TRIGGER IF NOT EXISTS myavailablecashtrigger
AFTER INSERT ON moneyincome WHEN (SELECT count() FROM availablecash)
BEGIN
--UPDATE availablecash SET money = new.money;
UPDATE availablecash SET money = new.money, code = new.code;
END;
-- Trigger for when availablecash table is empty
CREATE TRIGGER IF NOT EXISTS myavailablecashtrigger_nodata
AFTER INSERT ON moneyincome WHEN (SELECT count() FROM availablecash) = 0
BEGIN
INSERT INTO availablecash VALUES(new.code,new.money);
END;