Откат транзакции в MySQL - PullRequest
0 голосов
/ 18 декабря 2018

Мне нужна помощь с откатом.Мне нужно вставить в таблицу CATEGORIA ТОЛЬКО , когда я вставляю в CATEGORIA_IDIOMA.Поэтому я попытался СДЕЛКИ, но это не работает, у меня есть уникальное ограничение в CATEGORIA_IDIOMA FOR (id_idioma, nombre_categoria).Код для моей хранимой процедуры:

DELIMITER //
CREATE PROCEDURE sp_ingresar_categoria
(
    IN AV_CATEGORIA_NOMBRE VARCHAR(255), 
    IN AI_ID_IDIOMA INT
)
BEGIN

    DECLARE EXIT handler for sqlexception
    BEGIN
        SELECT 'EXISTE UN ERROR, NO SE PUDO INGRESAR LA CATEGORIA'
        ROLLBACK;
    END;

    START TRANSACTION;

        INSERT INTO `CATEGORIA`(`activo`) 
        VALUES (1);

        SELECT MAX(`id_categoria`) INTO @LI_CATEGORIA from `CATEGORIA`;

        INSERT INTO `CATEGORIA_IDIOMA`(`id_categoria`, `id_idioma`, `categoria_nombre`)
        VALUES(@LI_CATEGORIA, AI_ID_IDIOMA, AV_CATEGORIA_NOMBRE);

        commit;
END //

Когда я пробую его с новым значением, он работает нормально, но когда я пробую его с дублированным значением, он не вставляется в CATEGORIA_IDIOMA, ноон вставляется в CATEGORIA.

Может кто-нибудь объяснить мне, как это работает, или где моя ошибка, пожалуйста.

...