我必须为客户维持帐户余额
因为我有创建表
customer(id,name,address,mobno,balance);
余额字段是存储金额。
然后存入和取出的金额
我正在创建表事务
transaction(id,amount,type,adddate);
type
是存款/取款,
adddate
为timestamp
,金额已存入/取出。
我正在计算存款/取款金额并再次存储余额。
有数据
顾客
(1,'Ajay'.'India',23324,400);
交易
(1,400,d); balance 400
(2,300,w); balance 100
(3,700,d); balance 800
(4,200,w); balance 600
如果有人想要更新他的交易,我将面临问题。 (3500,d);余额600 //新余额 之后,其他数据将无法显示正确的值。
我想知道这是存储金额和交易的正确方法,还是有任何重击方式。
答案 0 :(得分:0)
看起来像这样的AFTER UPDATE
触发器可以完成这项工作:
CREATE TRIGGER balanceUpdate AFTER UPDATE on transaction
FOR EACH ROW
BEGIN
SET @diff = NEW.amount - OLD.amount;
IF(NEW.type = "withdrawal") THEN
SET @diff = -@diff;
END IF;
UPDATE customer SET balance = balance + @diff WHERE id = NEW.customer_id;
END
根据您的真实表结构,这会有所改变,但这个想法是正确的。它会将更新前的值与更新后的值进行比较,然后通过差异在正确的方向上调整余额。
以下是一些测试数据的快速演示:http://sqlfiddle.com/#!9/3a43b/2
如果交易类型从提款变为存款,则需要稍微调整一下,反之亦然,但如果有必要,上述内容应该足以让您到达那里。