【问题标题】:Using MySQL triggers to update customers balance使用 MySQL 触发器更新客户余额
【发布时间】:2015-04-30 22:46:01
【问题描述】:

我需要一些帮助来了解触发器及其工作原理。我有 3 张桌子:

客户
身份证 |余额

发票
身份证 |卡斯蒂德 |金额

付款
身份证 |客户 ID |金额

我有一个插入语句来插入发票:

$this->db->insert('invoices', array(
            'CustomerId' => $data['customerId'],
            'Description' => $data['Description'],
            'DateCreated' => $data['DateCreated'],
            'Amount' => $data['Amount']
        ));

并且需要在插入后更新客户余额。同样,在插入或创建付款之后。我需要从客户余额中扣除。

public function createPayment($data) {
        $this->db->insert('payments', array(
            'CustomerId' => $data['customerid'],
            'DateCreated' => date("Y-m-d H:i:s"),
            'Amount' => $data['amount']
        ));
    } 

如果在创建这些触发器时提供任何帮助,我们将不胜感激。

【问题讨论】:

    标签: mysql triggers


    【解决方案1】:

    您需要两个触发器 - 一个用于发票表:

    delimiter //
    CREATE TRIGGER add_invoice_to_balance AFTER INSERT ON invoices
    FOR EACH
    ROW
    BEGIN
        UPDATE Customers SET balance = balance + NEW.Amount
          WHERE Customers.id = NEW.custid;
    END;
    //
    delimiter;
    

    还有一张用于付款表:

    delimiter //
    CREATE TRIGGER add_payment_to_balance AFTER INSERT ON payments
    FOR EACH
    ROW
    BEGIN
        UPDATE Customers SET balance = balance - NEW.Amount
          WHERE Customers.id = NEW.custid;
    END;
    //
    delimiter ;
    

    fiddle here

    【讨论】:

    • 谢谢你..这工作。非常感激。 NEW.Amount 是否来自插入查询?
    • 正确。如果它是更新后触发器,您将可以访问NEW 值以及OLD 值。如果这已经完成了工作,请随时将其标记为已接受
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-05
    • 2022-01-11
    • 1970-01-01
    • 2020-08-15
    • 2020-11-30
    相关资源
    最近更新 更多