如果insert在事务中,则触发器不触发

gxwragnw  于 2021-06-17  发布在  Mysql
关注(0)|答案(0)|浏览(283)

在捐赠表中插入新行后,我编写了一个触发器来自动更新捐赠表行中的日期。问题是,它并没有像我预期的那样更新donator中的日期
不过,如果我在事务外部执行插入操作,触发器似乎可以工作。
触发因素如下:

  1. delimiter $$
  2. CREATE TRIGGER updateDate AFTER INSERT ON donation
  3. FOR EACH ROW
  4. UPDATE donator
  5. SET Next_Date = DATE_ADD(NEW.Donation_Date, INTERVAL 3 MONTH)
  6. WHERE id_Donator = NEW.Donator_id_Donator
  7. $$

交易如下:

  1. DELIMITER $$
  2. CREATE PROCEDURE RegisterDonation (in QuantityArg INT, in Donation_DateArg DATE, in Donator_idArg INT)
  3. BEGIN
  4. DECLARE exit handler for SQLEXCEPTION
  5. BEGIN
  6. SHOW ERRORS LIMIT 1;
  7. SHOW WARNINGS;
  8. ROLLBACK;
  9. END;
  10. DECLARE exit handler for SQLWARNING
  11. BEGIN
  12. SHOW ERRORS LIMIT 1;
  13. SHOW WARNINGS;
  14. ROLLBACK;
  15. END;
  16. START TRANSACTION;
  17. set @next_id := ifnull((select max(Donation_id) from donation) + 1, 1);
  18. INSERT INTO donation(Donation_id, Quantity, Donation_Date, Donator_id_Donator) VALUES
  19. (@next_id, QuantityArg, Donation_DateArg, Donator_idArg);
  20. COMMIT;
  21. END
  22. $$

我知道我可以只更新事务中的日期,但我还有其他触发器,只将代码复制粘贴到每个事务中听起来不是一个好的解决方案。有没有更好的办法?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题