MySQL中的回滚事务

时间:2018-12-18 16:20:07

标签: mysql transactions mysql-workbench transactional

我需要回滚方面的帮助。当我插入CATEGORIA时,我需要插入表CATEGORIA_IDIOMA中。因此,我尝试了一种TRANSACTION,但它不起作用,我在CATEGORIA_IDIOMA FOR(id_idioma,nombre_categoria)中有一个唯一约束。我的STORED PROCEDURE的代码是:

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中。

有人可以解释一下它是如何工作的,或者我的错误在哪里。

0 个答案:

没有答案