2015-04-30 29 views
0

我需要一些帮助来理解触发器及其工作原理。我有3个表:使用MySQL触发器更新客户余额

客户
ID |余额

发票
Id | Custid |金额

付款
Id | CustId |量

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

$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'] 
     )); 
    } 

任何协助将不胜感激创造这些触发器。

回答

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

+0

谢谢你..这工作。非常感激。 NEW.Amount是否来自插入查询? – user1367386

+0

正确。如果它是UPDATE触发器之后,则可以访问'NEW'值以及'OLD'值。如果这项工作已经完成,请随时将其标记为已接受 –