簡體   English   中英

MySQL觸發器需要上一個事件的字段

[英]MySQL Trigger that requires a field from a previous event

我還有另一個觸發問題,在解釋之前,我將向您展示代碼:

DELIMITER $$

CREATE PROCEDURE transferFunds ( receiver INT, sender INT, amount FLOAT )

BEGIN

  DECLARE senderBalance FLOAT;
  DECLARE receiverBalance FLOAT;

  SELECT balance INTO senderBalance 
    FROM accounts 
   WHERE accountNumber = sender;

  SELECT balance INTO receiverBalance 
    FROM accounts 
   WHERE accountNumber = receiver;

  SET autocommit = 0;

  UPDATE accounts
     SET balance = senderBalance - amount
   WHERE accountNumber = sender;

  UPDATE accounts
     SET balance = receiverBalance + amount
   WHERE accountNumber = receiver;

  IF senderBalance < amount THEN
    ROLLBACK;
  ELSE
    COMMIT;
  END IF;

END$$

CREATE TRIGGER transferTrigger AFTER UPDATE ON accounts
FOR EACH ROW
BEGIN

  -- Insert the Receiver and Sender and Amount to transfer_log table

END$$

我想創建一個觸發器來記錄剛剛發生的傳輸,但是我不能,因為觸發器可以在每行事件中使用。 如果我想在transfer_log表中記錄轉移事件並插入“至”和“發件人”帳號以及已轉移的金額,該怎么辦?

如您在問題中所述,觸發器按行工作。

您應該直接在存儲過程中進行日志記錄。 但是,您可以使用一種解決方法,盡管我認為它並不安全-特別是在處理貨幣交易時(如OP中所示)。

在您存儲的過程中:

SET @TranSender = sender;
SET @TranReceiver = receiver;
...

在觸發器內:

INSERT log_table(Sender, Receiver...)
VALUES (@TranSender , @TranReceiver...)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM