我还有一个触发问题,在我解释之前,我要给你看一个代码:
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...)
关于需要前一个事件的字段的 MySQL 触发器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5057725/