如果插入在事务内,则触发不触发

时间:2018-11-25 12:05:49

标签: mysql triggers transactions mysql-workbench

我在捐赠表上插入新行之后,编写了一个触发器以自动更新捐赠人表行上的日期。问题是,它没有像我期望的那样在捐赠者中更新日期

但是,如果我在事务外部进行插入,则触发器似乎起作用。

这是触发因素:

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
$$

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

0 个答案:

没有答案