我需要回滚方面的帮助。当我插入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
中。
有人可以解释一下它是如何工作的,或者我的错误在哪里。