在捐赠表中插入新行后,我编写了一个触发器来自动更新捐赠表行中的日期。问题是,它并没有像我预期的那样更新donator中的日期
不过,如果我在事务外部执行插入操作,触发器似乎可以工作。
触发因素如下:
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
$$
我知道我可以只更新事务中的日期,但我还有其他触发器,只将代码复制粘贴到每个事务中听起来不是一个好的解决方案。有没有更好的办法?
暂无答案!
目前还没有任何答案,快来回答吧!