SQLITE - 触发将值从表复制到另一个表

时间:2018-04-02 01:34:40

标签: sqlite triggers

我有一张名为“moneyincome”的表格

代码整数自动增量 钱dobule income_date日期

然后我又称为“availablecash”

代码整数 钱双倍

我的问题是:当我在表格“moneyincome”中插入一个值时,我需要复制此值并“覆盖”或“重写”availablecash中的值(在“money”字段中)作为该表中的唯一值但旁边“添加”新值到availableblcash表中的现有值... 我认为触发器会很好 - 我一直在寻找整个网络中的这些信息,但我无法得到我需要的东西。 不知道我是否清楚解释这一点。对不起英语不是我的母语。谢谢大家!这个网站真棒!我知道你会发布一些能以某种方式帮助我的东西。此致!

附加: -

我会尝试更好地解释这一点。

我有一个名为MoneyIncome的表,它将通过从java接口添加一些数据来填充..一个java桌面应用程序。

用户将键入需要支付多少钱,然后他必须保存该操作。

我想要的是:当他保存该操作时,“触发器”会将此值复制到另一个名为“availablemoney”的表中。

这个表(availableMoney)它没有任何关联。它是一个免费的表,并且没有autoinc键,因为我只想要一个值..最后一个值将是用户在表moneyincome中添加的旧的值。

[西班牙文]

Cuando ingreso un valor en la tabla dineroentrada en su campo“dinero”,necesitoqueéstevalorse copie y reemplace y ademas“sume”el valor del campo“dinero”de la tabla efectivodisponible。 Creo que un触发seríalomejor- Pero he estado buscando y no consigo dar con lo que quiero- Gracias este sitio es asombroso

2 个答案:

答案 0 :(得分:1)

将值从一个表复制到另一个表与规范化相反,因为您已经通过原始表可以随时获得该值。

但是,您可能有多个moneyincome行,并且您希望availablecash能够反映可用的总金额。

e.g。 在 moneyincome 表格中,您可能会有以下内容: -

  • 1 40.00 2018-01-01
  • 2 50.00 2018-01-02
  • 3 25.00 2018-01-03

并希望余额名为 availablecash ,即115.00。

您不需要另一个表格,您可以通过查询来确定这一点(您无论如何都要查询另一个表格以获得商店余额),例如。

SELECT sum(money) AS availablecash FROM moneyincome;

enter image description here

但是,如果你想要一个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 表格为: -

enter image description here

  • 注意!我意识到这可能不是你试图解释你想要的东西,但我不能真正理解你想要的东西。也许你应该展示你想要提供的例子(之前和之后)。我也相信你的设计/结构很可能不适合你想要的东西。

其他

根据您更新的要求,您实际上需要两个触发器(除非您最初在availablecash表中创建了1行)。如果不存在则插入新行,然后使用正常行来更新行。

这里有两个触发器: -

-- 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;

答案 1 :(得分:0)

嘿迈克请看这个。我一直在这里研究你的例子(我很欣赏),我找到了一个可能的解决方案:

让我们记住。我有2个表“MoneyIncome”和“AvailableCash”,这个代码可以工作,但只是当我插入一个新值。如果我在表MoneyIncome中编辑一个值,它就不起作用。当我尝试编辑我的MoneyIncome中的任何值并且它提交时,我的另一个表中没有任何事情发生..正如你在这个可能的解决方案中看到的那样,这是“和并覆盖”我的表AvailableCash中的旧值。但在编辑模式下,它不起作用。

这里是我的2个结构表

MoneyIncome 代码:整数:Pk:Autoinc 钱:双倍

AvailableCash

代码:Pk not Autoinc

availablemoney:Double

CREATE TRIGGER update_value
AFTER INSERT
ON MoneyIncome
      WHEN (
SELECT count() 
  FROM AvailableCash


BEGIN
UPDATE AvailableCash
   SET availablemoney = (new.money + availablemoney),
       code = new.code;
END;

我不知道如何才能在编辑模式下工作。非常感谢你帮助我。