Триггер не срабатывает, если вставка находится внутри транзакции - PullRequest
0 голосов
/ 25 ноября 2018

Я написал триггер для автоматического обновления даты в строке таблицы donator после добавления новой строки в мою таблицу donation .Проблема в том, что она не обновляет дату в 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
$$

Я знаю, что могу просто обновить дату внутри транзакции, но у меня есть другие триггеры, и это не похоже нахорошее решение просто скопировать вставить код в каждую транзакцию.Есть ли лучший способ сделать это?

...