Есть ли способ по результату выполнения транзакции сделать коммит или отменить изменения mysql

Уважаемые знатоки. Возникла такая проблема: Мне необходимо выполнить две хранимые процедуры друг за другом, и если хотя бы одна из них прошла неудачно, отменить всю транзакцию.

START TRANSACTION;
   trans_1(1, 1, @i1); #этот запрос сможет выполниться и в @i1 попадет число > 0
   trans_1(12, 1, @i2); #этот запрос не сможет выполниться и в @i2 попадет -1
   IF @i1 < 1 OR @i2 < 1 THEN ROLLBACK;
   ELSE COMMIT;

Хотелось бы что-то вроде такого, но этот вариант не работает, я написал его просто для демонстрации желаемого. СУБД PHPMyAdminV5.0.2 MySQL v8.0 Буду рад вашим примерам и объяснениям. Заранее спасибо.


Ответы (1 шт):

Автор решения: Akina

Ну... схематично, при использовании UDV в качестве флага, где-то так:

CREATE PROCEDURE proc1 (...)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
    SET @flag = FALSE;
-- действия процедуры 1
END;
CREATE PROCEDURE proc2 (...)
BEGIN
DECLARE EXIT HANDLER FOR SQLEXCEPTION 
    SET @flag = FALSE;
-- действия процедуры 2
END
START TRANSACTION;
SET @flag = TRUE;
CALL proc1(...);
IF @flag THEN
    CALL proc2(...);
END IF;
IF @flag THEN
    COMMIT;
ELSE
    ROLLBACK;
END IF;
→ Ссылка