我还有另一个触发问题,在我解释之前,我会告诉你一个代码:
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帐号以及转移的金额,我该怎么办呢?
答案 0 :(得分:0)
正如您在问题中所述,触发器按行进行。
您应该直接在存储过程中进行日志记录。但是你可以使用一种解决方法,虽然我认为它不安全 - 特别是在处理货币交易时(如OP中所示)。
存储过程中的内容:
SET @TranSender = sender;
SET @TranReceiver = receiver;
...
在触发器内:
INSERT log_table(Sender, Receiver...)
VALUES (@TranSender , @TranReceiver...)