创建触发器来添加列数据,但不进行减法

guykilcj  于 2021-06-17  发布在  Mysql
关注(0)|答案(1)|浏览(251)

经过几次谷歌搜索,我来到这里。
我有一个mysql数据库表名 users . 我有两个专栏, account_balance 以及 earned_total .
我在php端有几个地方更新了 account_balance 当用户做某事时。我想知道他到目前为止总共挣了多少钱。所以我创造了一个 earned_total 列。在不修改php代码的情况下使用trigger(或任何其他方法)如何更新 earned_total 列太多时 account_balance 列是否更新?

记住当用户退出时 earned_total 价值不应降低。

kupeojn6

kupeojn61#

drop table if exists t;
create table t(account_balance int,earned_amount int);

drop trigger if exists t;
delimiter $$
create trigger t before update on t
for each row
begin
        insert into debug_table(msg,msg2) values (old.earned_amount,new.earned_amount);
        if new.account_balance > old.account_balance then 
            set new.earned_amount = new.earned_amount + (new.account_balance - old.Account_balance);
        end if;
        insert into debug_table(msg,msg2) values (old.earned_amount,new.earned_amount);
end $$

delimiter ;
truncate table t;
truncate table debug_table;

insert into t values (10,10);
update t set account_balance = Account_balance + 10 where 1 = 1;

update t set account_balance = Account_balance - 10 where 1 = 1;

select * from t;

+-----------------+---------------+
| account_balance | earned_amount |
+-----------------+---------------+
|              10 |            20 |
+-----------------+---------------+
1 row in set (0.00 sec)

select * from debug_table;

+----+------+------+
| id | msg  | MSG2 |
+----+------+------+
|  1 | 10   | 10   |
|  2 | 10   | 20   |
|  3 | 20   | 20   |
|  4 | 20   | 20   |
+----+------+------+
4 rows in set (0.00 sec)

注意,debug\ u表不是解决方案所必需的,它的存在是为了表明mysql所做的第一件事就是写所有旧的。新的值。价值观。
就我个人而言,我不会存储赚得的金额,有很大的误差范围,它可以很容易地计算。举例来说,假设一个正的金额被冲销/冲销,这会减少赚得的金额,但是没有办法将其与实际提款区分开来。

相关问题