MySQL触发器,需要前一个事件的字段

时间:2011-02-20 14:50:19

标签: mysql sql triggers

我还有另一个触发问题,在我解释之前,我会告诉你一个代码:

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$$

我想创建一个触发器来记录刚刚发生的传输,但我不能因为Trigger在每行事件中工作。如果我想在transfer_log表中记录转移事件并插入To和From帐号以及转移的金额,我该怎么办呢?

1 个答案:

答案 0 :(得分:0)

正如您在问题中所述,触发器按行进行。

您应该直接在存储过程中进行日志记录。但是你可以使用一种解决方法,虽然我认为它不安全 - 特别是在处理货币交易时(如OP中所示)。

存储过程中的内容:

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

在触发器内:

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