我在捐赠表上插入新行之后,编写了一个触发器以自动更新捐赠人表行上的日期。问题是,它没有像我期望的那样在捐赠者中更新日期
但是,如果我在事务外部进行插入,则触发器似乎起作用。
这是触发因素:
delimiter $$
CREATE TRIGGER updateDate AFTER INSERT ON donation
FOR EACH ROW
UPDATE donator
SET Next_Date = DATE_ADD(NEW.Donation_Date, INTERVAL 3 MONTH)
WHERE id_Donator = NEW.Donator_id_Donator
$$
这是交易:
DELIMITER $$
CREATE PROCEDURE RegisterDonation (in QuantityArg INT, in Donation_DateArg DATE, in Donator_idArg INT)
BEGIN
DECLARE exit handler for SQLEXCEPTION
BEGIN
SHOW ERRORS LIMIT 1;
SHOW WARNINGS;
ROLLBACK;
END;
DECLARE exit handler for SQLWARNING
BEGIN
SHOW ERRORS LIMIT 1;
SHOW WARNINGS;
ROLLBACK;
END;
START TRANSACTION;
set @next_id := ifnull((select max(Donation_id) from donation) + 1, 1);
INSERT INTO donation(Donation_id, Quantity, Donation_Date, Donator_id_Donator) VALUES
(@next_id, QuantityArg, Donation_DateArg, Donator_idArg);
COMMIT;
END
$$
我知道我可以更新交易中的日期,但是我还有其他触发器,将代码复制粘贴到每个交易中听起来不是一个好的解决方案。有更好的方法吗?